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

如何用传统Promise理解JavaScript async函数?

关于Promise与async/await的理解验证

我对Promise的认知

  • 我自认为对Promise的理解已经达到99%:它本质和观察者模式类似,核心逻辑是**“当值准备好时,通知我(调用我传入的回调函数)”**
  • 和观察者模式的区别:就算延迟订阅,依然会收到通知,而且只会触发一次

对async/await的困惑与转换尝试

接触async function()时我偶尔会犯懵:await并不是真正意义上的“等待”,更像是notifyMeLaterWhenReady——调用async函数时会立即返回一个Promise,当函数执行到末尾(或提前返回)时,这个Promise就会被resolve。

举个例子,我写的这段async函数:

async foo() => {
  const a = await bar();
  const b = await wah(a);
  return lala(a, b);   // lala 是普通函数(非async)
}

我把它转换成了Promise范式的等价代码:

function foo() {
  return new Promise((resolve, reject) => {
    let a, b;

    bar()
      .then(v => { a = v; return wah(a); })
      .then(v => { b = v; resolve(lala(a, b)); });
  });
}

核心疑问

想确认这种转换方式是否准确?只有转换成这种形式,我才能对async/await达到99%的理解。另外我平时会忽略catch、finally以及throw、try/catch这类错误处理逻辑,毕竟身边很多同事也这么做,大家都觉得网络问题居多,代码也无能为力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:43:21