debugging 在VS代码“调试控制台”中,运行一个JavaScript await函数

czq61nw1  于 2023-02-13  发布在  Java
关注(0)|答案(2)|浏览(162)

在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代码调试控制台中输出函数的结果?

xzv2uavs

xzv2uavs1#

VS代码调试控制台支持顶级异步/等待(https://github.com/microsoft/vscode-js-debug#top-level-await),但问题可能是您在断点处暂停。
如果在断点暂停时使用wait,则只能返回一个挂起的Promise。这是因为JavaScript事件循环在断点暂停。

iszxjhcz

iszxjhcz2#

@jonas-wilms在对原问题的评论中有正确的想法。
@andrej-k有一个很好的观点,即事件循环是暂停的。
综合以上内容,下面是当在VS代码调试控制台中的断点处暂停时,如何从async函数获取输出:

// config.entry() is an async function

config.entry().then((result) => { debugger; })

config.entry是异步函数

调用具有debugger;.then()函数

.then()回调中转储result

相关问题