3

我试图弄清楚如何实现 Visual Studio 代码扩展。(基于“Hello World!”示例。)

我想做以下事情:

  • 在 node.js child_process 的编辑器中执行 example.cmd 文件(有效)
  • 但在此之前,自动保存文件以激活最新更改(这就是问题)

https://code.visualstudio.com/Docs/extensionAPI/vscode-api有 Visual Studio 代码 api 的描述。

这是我认为要使用的命令:

executeCommand<T>(command: string, ...rest: any[]): Thenable<T>

我需要的:

文件保存是异步的。例如,可能会显示一个文件保存对话框。用户可以正确保存或取消它。我需要等到用户操作结束,然后在成功的情况下调用我的命令提示符。

在我的代码中:

let disposable = vscode.commands.registerCommand('extension.sayHello', () => {
    ....

    var retval =
     vscode.commands.executeCommand('workbench.action.files.save')
     .then(function(result)
       {
        // It should wait til end of user action,
        // But it never reach here
        myOutputChannel.append('workbench.action.files.save:' + result + '\n');
       });

     // and immediately runs the child process code below
     ....
});

发生了什么:它运行代码,不等待,不保存,处理不存在的文件,报告错误,退出函数。在所有文件保存对话框出现之后。:(

谁能给我一个提示什么是错的?这是视觉工作室代码的错误吗?或者我做错了什么?我是 node.js 的新手。我想,我没有得到如何Thenable<T>正确使用?

4

1 回答 1

1

这是有关如何正确保存文件的简短片段:

let editor = vscode.window.activeTextEditor;
if (!editor) {
   return;
}

let doc = editor.document;
await editor.document.save();
于 2017-02-28T08:45:32.750 回答