Javascript Visual Studio代码扩展:如何在拖动鼠标时停止触发OnDidChangeTextEditor选择事件?

Javascript Visual Studio代码扩展:如何在拖动鼠标时停止触发OnDidChangeTextEditor选择事件?,javascript,visual-studio-code,vscode-extensions,Javascript,Visual Studio Code,Vscode Extensions,我目前正在开发一个行解析扩展,它根据当前选定的行执行任务,并在用户更改其选择时重新解析 当用户选择多行时进行更新是没有意义的,因此所有内容都会在块内激发,如下所示: if(editor.selection.isSingleLine){ // Line Handling Here } 但是,当用户拖动鼠标以选择他们想要的文本时,会发生这样的情况:事件会定期触发,因为从技术上讲,当用户拖动文本时,他们会“选择”他们想要选择的部分,其中一些部分只包括他们开始拖动的行 它还会为双击解析两次,但

我目前正在开发一个行解析扩展,它根据当前选定的行执行任务,并在用户更改其选择时重新解析

当用户选择多行时进行更新是没有意义的,因此所有内容都会在块内激发,如下所示:

if(editor.selection.isSingleLine){
    // Line Handling Here
}
但是,当用户拖动鼠标以选择他们想要的文本时,会发生这样的情况:事件会定期触发,因为从技术上讲,当用户拖动文本时,他们会“选择”他们想要选择的部分,其中一些部分只包括他们开始拖动的行

它还会为双击解析两次,但这可能没问题,因为所选单词无论如何都在同一行上

对于键盘和命令,它的行为与预期的一样,但我希望它只在单击一次(重新定位光标)或用户完成拖动选择后启动

这可能不是问题,因为最后一个选择将在最后执行,我可以一起使用它,但这似乎不雅观,可能会导致性能极差,因为行检查将重复执行


编辑:如果是多行选择,我实际上想做一些其他事情,因此我也希望能够获得最终选择。

事件是全局的,并在所有扩展之间共享。因此,单个扩展无法对其进行配置。要处理“事件雪崩”,应使用去抖动。与其在事件处理程序中执行工作,不如将其计划为尽快完成,并取消可能计划的操作。像这样

let handle; function doWorkNow() { // parse what is selected } onDidChangeTextEditorSelection(() => { clearTimeout(handle); handle = setTimeout(() => doWorkNow(), 10); }); 让我来处理; 函数doWorkNow(){ //解析所选内容 } onDidChangeTextEditorSelection(()=>{ 清除超时(句柄); handle=setTimeout(()=>doWorkNow(),10); });