其他分享
首页 > 其他分享> > 手写Promise.all

手写Promise.all

作者:互联网

一、Pormise.all

接受一个Promise对象组成的数组返回一个新的Promise,只有所有的Promise都成功才成功,只要有一个失败了就直接失败。成功的结果是每个Promise成功结果组成的数组失败的结果是Promise数组中失败的结果

二、实现

function pAll (_promises) {
  return new Promise((resolve, reject) => {
    // Iterable => Array
    const promises = Array.from(_promises)
    // 结果用一个数组维护
    const res = []
    const len = promises.length
    let count = 0
    for (let i = 0; i < len; i++) {
      // Promise.resolve 确保把所有数据都转化为 Promise
      Promise.resolve(promises[i]).then(result=> { 
        // 因为 promise 是异步的,保持数组一一对应
        // 如果参数是 Promise 实例,那么Promise.resolve将不做任何修改、原封不动地返回这个实例。
        res[i] = result;
        // 如果数组中所有 promise 都完成,则返回结果数组
        if (++count === len) {
          resolve(res)
        }
        // 当发生异常时,直接 reject
      }).catch(err => reject(err))
    }
  })
}

其中有几个点:

参考:https://github.com/shfshanyue/Daily-Question/issues/500

标签:promises,resolve,const,实例,Promise,数组,手写
来源: https://blog.csdn.net/weixin_44019523/article/details/117228907