【发布时间】:2018-11-05 21:47:45
【问题描述】:
在 VS Code“调试控制台”中,我可以在调试我的 JavaScript 代码(包括运行我的函数)时在调试会话的中间评估我的代码上的表达式。但是,我似乎无法运行 async 函数,即使我使用 IIFE 等也是如此。
我有以下代码:
const axios = require('axios');
async function getUrl() {
const response = await axios.get('http://example.com/');
return response.data;
}
async function main() {
const response = await getUrl();
console.log(response);
}
main();
我在async function main() { 行上设置了一个断点,然后运行 VS Code 调试器。然后我尝试在调试控制台中以不同的方式运行getUrl 函数,例如getUrl()、getUrl().then((data) => data) 和(async () => getUrl())(),它们都返回Promise { pending })。 main() 返回相同的结果(如果在函数定义之后运行)。这些方法都不会打印函数的返回值。
我也试过await getUrl(),它返回SyntaxError: await is only valid in async function。
我知道我可以在代码中使用console.log 输出我想要的功能,如果真的有必要的话,但我正在寻找一种解决方案,专门使用调试控制台来打印专门使用@ 创建的承诺的结果987654333@函数。
那么,当函数为async时,真的有办法在VS Code Debug Console中输出函数的结果吗?
【问题讨论】:
-
是的,当然所有这些都会返回一个承诺。但是,调用
main()应该打印结果 -
你试过
await getUrl()吗?不确定 VS Code 是否已经支持 - 节点使用命令行标志。 -
getUrl().then(data => { /*set breakpoint here */ }) -
@Bergi 实际上
main()也返回Promise { pending }。我已经尝试过await getUrl()。 -
@JonasW。我正在寻找不需要修改代码的解决方案。如果我真的想要,那么是的,我可以编写打印我想要的代码的代码。但理想情况下,可以从调试控制台获得我想要的。
标签: javascript debugging asynchronous promise visual-studio-code