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

JavaScript嵌套async/await用法疑问:如何打印resolved b及异步嵌套是否常见

问题解答

问题1:如何成功打印resolved b

你两次运行都没有输出resolved b,核心原因是从来没有对b()返回的Promise的resolve结果做打印处理:

  • 第一段代码里a()直接调用b(),没有等待也没有处理它的返回值,b()和a()内部的2s定时器并行执行,所以总耗时2s就输出了resolved a。
  • 第二段代码你给a()添加了await b()逻辑,会先等b()的2s定时器执行完resolve,再执行a()内部的2s定时器,两个异步操作串行所以总耗时4s,但依然没有处理b()的返回值,所以不会打印resolved b。

解决方法很简单,只要拿到b()的resolve结果后打印即可,参考修改后的a()代码:

async function a() {
  // 接收b()返回的resolve值
  const bResult = await b();
  // 打印值即可输出resolved b
  console.log(bResult);
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('resolved a');
    }, 2000);
  });
}

修改后运行输出顺序为:
"calling"
"calling b"
2秒后输出"resolved b"
再过2秒输出"resolved a"
完全符合你要求的a()内部先等b()执行完再走后续逻辑的需求。

问题2:该嵌套异步调用场景是否常见

这种场景非常常见,是async/await最典型的使用场景之一。实际业务开发中到处都是类似逻辑:比如你要调用获取用户信息的接口,需要先调用获取鉴权token的接口拿到凭证才能发请求,外层的页面初始化逻辑又要等用户信息返回之后才能渲染页面,和你现在的结构完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 14:15:02