Promise.all的简单实现

Promise.all的简单实现

Promise.all = arr => {
    let aResult = [];    //用于存放每次执行后返回结果
    return new _Promise(function (resolve, reject) {
      let i = 0;
      next();    // 开始逐次执行数组中的函数(重要)
      function next() {
        arr[i].then(function (res) {
          aResult.push(res);    // 存储每次得到的结果
          i++;
          if (i == arr.length) {    // 如果函数数组中的函数都执行完,便resolve
            resolve(aResult);
          } else {
            next();
          }
        })
      }
    })
  };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Promise.all() 方法接收一个 Promise 对象的数组作为参数,当这个数组里的所有 Promise 对象都变为 resolved 状态时,它才会返回一个新的 Promise 对象,同时这个新的 Promise 对象的 resolved 的值是一个数组,包含了每个 Promise 对象的 resolved 值。如果这个数组里的任意一个 Promise 对象变为 rejected 状态,那么 Promise.all() 方法返回的新的 Promise 对象就会变为 rejected 状态,并且 rejected 的值是第一个变为 rejected 状态的 Promise 对象的值。 Promise.all() 方法的实现原理是通过创建一个新的 Promise 对象来实现的。在这个新的 Promise 对象里,我们需要维护一个计数器,用来记录数组里所有 Promise 对象的状态。同时,我们还需要维护一个数组,用来存储每个 Promise 对象 resolved 的值。当数组里所有 Promise 对象都变为 resolved 状态时,我们就可以将这个数组作为 resolved 值来 resolve 这个新的 Promise 对象。如果数组里任意一个 Promise 对象变为 rejected 状态,我们就可以将这个 rejected 的值作为 rejected 值来 reject 这个新的 Promise 对象。 下面是一个简单实现示例: ``` function promiseAll(promises) { return new Promise((resolve, reject) => { const results = []; let count = 0; for (let i = 0; i < promises.length; i++) { promises[i].then((result) => { results[i] = result; count++; if (count === promises.length) { resolve(results); } }).catch((error) => { reject(error); }); } }); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值