You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VS Code调试控制台运行JavaScript async函数并查看结果?

解决VS Code调试控制台无法获取async函数返回结果的问题

我之前也碰到过完全一样的困扰——在断点调试时,想直接在控制台查看async函数的执行结果,要么拿到的是Promise { pending },要么用await直接调用还会报语法错误。下面几个方法亲测有效:

方法1:用.then()结合控制台打印

直接在调试控制台输入这段代码:

getUrl().then(result => console.log(result))

虽然调用后会立刻返回Promise { pending },但当axios请求完成、Promise状态变为resolved时,控制台会自动打印出实际的返回结果。这是最不需要额外配置的简单方案。

方法2:用自执行异步函数包裹await

如果你更习惯await的写法,可以把代码放在异步自执行函数(IIFE)里:

(async () => {
  const result = await getUrl();
  console.log(result);
})();

这个函数本身会返回pending的Promise,但内部的console.log会在请求完成后输出结果。你之前可能没留意到,这个方法其实是有效的,只是函数返回的Promise状态不影响最终结果的打印。

方法3:开启VS Code调试控制台的顶级await支持

如果你想直接用await getUrl()这种简洁写法,需要确保你的VS Code版本足够新(1.58及以上),且调试器支持顶级await。对于Node.js调试来说,现在默认是支持的,但如果还是报错,可以检查你的launch.json配置,确保添加了异步栈追踪的设置:

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "program": "${file}",
  "asyncStackTraces": true
}

开启asyncStackTraces后,调试控制台的顶级作用域就支持直接使用await了,此时你输入await getUrl()就能直接拿到resolved后的结果。

补充说明

为什么直接调用getUrl()只会返回pending的Promise?因为async函数本身就会返回Promise,而axios请求是异步操作,调用瞬间Promise还处于等待状态,只有当请求完成后才会变为resolved。而之前用await报错,大多是因为旧版本VS Code的调试控制台不支持顶级await,必须把await放在异步函数内部才行。

内容的提问来源于stack exchange,提问作者Gary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:20