Javascript 如何在VSCode调试器中执行异步函数?

Javascript 如何在VSCode调试器中执行异步函数?,javascript,node.js,visual-studio-code,async-await,Javascript,Node.js,Visual Studio Code,Async Await,如果我在一些javascript代码中插入VSCode调试器并使用wait调用异步函数,它只会返回一个承诺。如何在调试器中解析承诺,以便查看结果 例如,如果我这样定义一个函数: const doAsyncThing = async () => { return new Promise((resolve) => { setTimeout(() => { resolve(5) }, 1000) }) } 当我

如果我在一些javascript代码中插入VSCode调试器并使用wait调用异步函数,它只会返回一个承诺。如何在调试器中解析承诺,以便查看结果

例如,如果我这样定义一个函数:

const doAsyncThing = async () => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(5)
        }, 1000)
    })
}
当我在调试器中调用它时会发生这种情况:

> const result = await doAsyncThing()
Promise {<pending>}
> result
Uncaught ReferenceError: result is not defined
> doAsyncThing().then(r => console.log(r))
Promise {<pending>}
> await doAsyncThing().then(r => console.log(r))
Promise {<pending>}
>const result=wait doasynchthing()
承诺{}
>结果
未捕获引用错误:未定义结果
>doAsyncThing().then(r=>console.log(r))
承诺{}
>等待doAsyncThing()。然后(r=>console.log(r))
承诺{}
如何让它在调试器中解析承诺并获得结果

这不是一个复制品

这个问题似乎是在问如何在异步函数中放置断点,而我正试图从调试器实际执行该函数


我在一篇新的帖子中重新创建了这个问题,因为我不相信它是上述帖子的翻版。这是我第一次发帖,希望这是正确的做法。

也许在函数调用前加上一个“wait”?

你可以这样做:

const result=等待承诺。解决(“成功”);
调试器

然后在VSCode中运行调试器。

这是否回答了您的问题?异步函数根据定义返回承诺。在承诺完成之前没有结果。编辑器或调试器不会改变这一点。如果要获得结果,需要等待承诺完成并处理结果-使用
wait
。然后
如果尝试在浏览器中调试脚本,则标记为
async
的函数仍将返回promise@DaniloIvanovic谢谢,但是不,那不回答。我试图从调试器调用该函数,我更新了我的问题以显示这一点。@PanagiotisKanavos谢谢,但我尝试了使用
wait
。然后在调试器中使用
,但两者都不能解决承诺。我已经更新了这个问题。换句话说,使用
wait
Hi@wuliu,谢谢,但我试图做的是从调试器调用异步代码,而不是在现有代码中放入调试器。我更新了我的问题以反映这一点。谢谢,但即使我这样做,它仍然会返回一个承诺,请参阅我更新的问题。我很确定调试器只能立即打印出给定语句在解释时返回的结果。如果路由中存在异步和/或超时,它不会“等待”它,而是返回等待它的内容。我只是将“setTimeout(()=>{console.log(1)},1000)”放入我的调试器中。它会立即打印一个超时对象实例。然后1秒后,“1”来了。因此,如果您没有从上面的示例中获得“5”,那么您可能希望“继续(F5)”调试会话?“doAsyncThing()。然后(r=>console.log(r))”这里我从您的示例中获得“5”。由于我在一个作用域中定义了doAsyncThing,我在其中放置了一个断点,在粘贴和执行代码段后,我需要“继续(F5)”并等待输出。