如何用传统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
相关产品推荐
相关产品推荐

