在VS代码的"调试控制台"中,我可以在调试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代码调试器,然后尝试在调试控制台中以不同的方式运行getUrl
函数,例如getUrl()
、getUrl().then((data) => data)
和(async () => getUrl())()
。Promise { pending }
)。main()
返回相同的值(如果在函数定义之后运行)。这些方法都不打印函数的返回值。
我还尝试了await getUrl()
,它返回SyntaxError: await is only valid in async function
。
我知道如果真的需要,我可以在console.log
的代码中输出我想要的函数,但是我正在寻找一个解决方案,专门使用调试控制台来打印专门使用await
函数创建的承诺的结果。
因此,当函数为async
时,是否真的有办法在VS代码调试控制台中输出函数的结果?
2条答案
按热度按时间xzv2uavs1#
VS代码调试控制台支持顶级异步/等待(https://github.com/microsoft/vscode-js-debug#top-level-await),但问题可能是您在断点处暂停。
如果在断点暂停时使用wait,则只能返回一个挂起的Promise。这是因为JavaScript事件循环在断点暂停。
iszxjhcz2#
@jonas-wilms在对原问题的评论中有正确的想法。
@andrej-k有一个很好的观点,即事件循环是暂停的。
综合以上内容,下面是当在VS代码调试控制台中的断点处暂停时,如何从
async
函数获取输出:config.entry
是异步函数调用具有
debugger;
的.then()
函数在
.then()
回调中转储result