【问题标题】:"rejected promise not handled within 1 second" vscode Extension API“拒绝承诺未在 1 秒内处理” vscode 扩展 API
【发布时间】:2018-10-11 05:49:40
【问题描述】:

我正在尝试为 VS 代码编写一个简单的扩展,将选择重命名为给定的字符串。该应用程序使用扩展生成器进行引导:https://code.visualstudio.com/docs/extensions/example-hello-world#_generate-a-new-extension

为此,我使用以下代码:

const editor = vscode.window.activeTextEditor;
    if (!editor) throw Error;

    const position = editor.selection.active
    const uri = editor.document.uri

    vscode.commands.executeCommand("vscode.executeDocumentRenameProvider", uri, position, "donkey")
        .then(edit => {
            if (!edit) throw Error;

            return vscode.workspace.applyEdit(edit);
        });

命令绑定到键绑定。我使用 F5 启动调试器(启动一个用于调试的 vs 代码实例,如教程中所示:https://code.visualstudio.com/docs/extensions/example-hello-world#_debugging-your-extension)。然后,我在该调试实例中打开的文件中选择一堆代码并按下我的键绑定。

但是,在调试控制台中,我得到“拒绝承诺未在 1 秒内处理”。不会抛出任何错误,因为 executeCommand 是一个 Thenable,而不是一个真正的 Promise,所以我不能在它上面调用 catch()。

我尝试将调用包装在 try/catch 块中,但没有成功。 当我尝试做其他事情时,例如使用 vscode.window.showInformationMessage 显示消息或提示用户输入时,它可以工作,但我没有看到错误。

我也尝试对 Typescript 版本的扩展程序做同样的事情,但我得到了相同的行为。

我看不出我做错了什么,有什么我遗漏的吗?

【问题讨论】:

  • 如果它当前不是一个真正的 Promise,您可以将其 convert 自己和catch,对吧?
  • 你尝试的不是try/catch,而是catch()
  • 是的,我仍然得到相同的结果。我读到这可能是由于没有调用reject() 或其他东西的承诺失败引起的,但这来自vscode api函数本身。

标签: javascript visual-studio-code vscode-extensions vscode-debugger


【解决方案1】:

Thenable.then 接受两个参数:成功延续和失败延续。您可以使用失败延续来确保正确处理拒绝:

vscode.commands.executeCommand("vscode.executeDocumentRenameProvider", uri, position, "donkey")
    .then(edit => {
        if (!edit) throw Error;

        return vscode.workspace.applyEdit(edit);
    })
    .then(undefined, err => {
       console.error('I am error');
    })

这样,如果executeCommand,之前的then,或者applyEdit都失败了,那么拒绝就被妥善处理了

【讨论】:

  • 马特,你是个传奇。我从来没有想过.then(undefined, err => { 是当你没有抓到的时候你有的抓。这将大大提高我的代码可读性。
  • 多么奇怪。我在使用.then(fn, err=>{...}) 时遇到了类似的问题,但在使用.then(fn).catch(err=>{...}) 时没有。他们不应该是一样的吗?
猜你喜欢
  • 2019-07-08
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多