【发布时间】:2021-03-07 19:49:38
【问题描述】:
如果我在一些 javascript 代码中放入 VSCode 调试器并使用 await 调用异步函数,它只会返回一个 Promise。如何在调试器中解析 promise 以便查看结果?
例如,如果我这样定义一个函数:
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>}
我怎样才能让它解决承诺并在调试器中得到结果?
这不是How to debug async/await in visual studio code?的重复项
这个问题似乎是在询问如何在异步函数中放置断点,而我正试图从调试器中实际执行该函数。
我在新帖子here 中重新创建了这个问题,因为我不认为它与上述帖子重复。这是我第一次发帖,希望这是正确的做法。
【问题讨论】:
-
一个异步函数根据定义返回一个promise。在承诺完成之前没有结果。编辑器或调试器不会改变它。如果您想获得结果,您需要等待承诺完成并处理结果 - 使用
await或.then -
如果您尝试在浏览器中调试脚本,标有
async的函数仍会返回一个承诺 -
@DaniloIvanovic 谢谢,但不,这没有回答。我正在尝试从调试器中调用该函数,我更新了我的问题以表明这一点。
-
@PanagiotisKanavos 谢谢,但我尝试在调试器中同时使用
await和.then,但都没有解决承诺。我已经更新了问题。
标签: javascript node.js visual-studio-code async-await