Azure Data Studio扩展如何监听查询完成事件并获取执行结果?
针对Azure Data Studio扩展相关问题的解答
1. 是否存在查询执行完成后可监听的事件
存在官方原生支持的监听事件,无需通过按键绑定绕路实现。你可以使用Azure Data Studio扩展API中azdata.querymanagement命名空间下的onQueryComplete事件,该事件会在任意查询执行完成后触发,回调参数包含查询执行状态、结果集、连接信息、执行耗时等完整元数据。
示例注册代码:
import * as azdata from 'azdata'; import * as vscode from 'vscode'; export function activate(context: vscode.ExtensionContext) { // 注册查询完成监听器 const queryCompleteDisposable = azdata.querymanagement.onQueryComplete(async (event) => { // event为查询完成的上下文对象 if (event.status === azdata.QueryExecutionStatus.Succeeded) { // 查询执行成功,在此处插入你的自定义逻辑 console.log(`查询执行完成,共返回${event.resultSetCount}个结果集`); // 可通过event.results获取具体结果数据 } }); // 加入扩展的释放队列,扩展卸载时自动销毁监听器 context.subscriptions.push(queryCompleteDisposable); }
如果只需要监听你的扩展触发的查询,可在触发查询时记录当前会话/编辑器标识,在回调中做匹配过滤即可。
2. 调用executeCommand('runQueryKeyboardAction')获取查询结果的方法
runQueryKeyboardAction是ADS的内置快捷命令,设计上没有返回值,直接调用无法拿到执行结果,有两种更稳定的实现方案:
- 方案1:搭配
onQueryComplete事件做关联
调用runQueryKeyboardAction前,先记录当前活动查询编辑器的URI、当前连接会话ID,在onQueryComplete的回调中匹配对应标识的查询事件,即可获取本次触发的查询结果。 - 方案2:替换为官方公开的查询执行API
不调用内置的按键命令,直接使用azdata.querymanagement.runQuery执行查询,该API为异步方法,执行完成后会直接返回查询结果,可控性更高:const activeQueryEditor = azdata.queryeditor.getActiveQueryEditor(); if (activeQueryEditor) { // 执行当前编辑器内的全部查询,也可传入参数指定执行选中的文本段 const runResult = await azdata.querymanagement.runQuery(activeQueryEditor.document.uri); // 直接从runResult中获取结果信息 console.log('查询执行结果:', runResult.results); // 此处插入你的自定义逻辑 }
如果需要和用户按F5的动作强绑定,可在扩展的package.json中通过contributes.keybindings配置覆盖默认F5绑定,指向你自定义的命令,在自定义命令中先执行查询、再运行你的业务逻辑即可。
内容的提问来源于stack exchange,提问作者Dawid Mikołaj Alejski
相关产品推荐
相关产品推荐

