实现getABC()函数:聚合同步、回调、Promise函数结果并返回Promise
解决方案
问题分析
原实现的核心问题:
getB是异步回调函数,执行getB(cb)后回调要10ms后才触发,但getABC立刻返回了空的ARR,导致最终输出空数组- 回调内部的
arr仅做了打印,没有关联到函数返回值,且getB本身无返回值,所以res为undefined
修正后的getABC函数体
function getABC() { // 将回调风格的getB转换为Promise const bPromise = new Promise(resolve => { getB(resolve); }); // 同步获取A的结果,等待B和C的Promise完成后返回聚合结果 return Promise.all([ getA(), bPromise, getC() ]); }
实现说明
- 同步处理
getA:直接调用getA()获取结果,Promise.all会自动将同步值包装为已resolved的Promise - 回调转Promise:用
new Promise包裹getB,当getB的回调触发时,通过resolve传递B的值,把回调异步逻辑转为Promise规范 - 聚合异步结果:
Promise.all会等待所有传入的Promise(包括同步值)完成,然后按传入顺序返回结果数组['A', 'B', 'C'],完全符合需求
内容的提问来源于stack exchange,提问作者Sounav Saha
相关产品推荐
相关产品推荐

