ES6-Promise.all简单版实现

Promsie.all用法

实现一个方法首先要理解此方法的用法,Promise.all是es6中的一个方法,接收一个包含一组实例为Promise的数组作为参数,然后返回一个Promise对象。具体请看阮一峰的es6的相关知识。

const p = Promise.all([p1, p2, p3]);

注意p1,p2,p3都为Promise对象 

(1)只有p1p2p3的状态都变成fulfilledp的状态才会变成fulfilled,此时p1p2p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1p2p3之中有一个被rejectedp的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

具体实现

function promiseAll(arr) {
   let resultArr = [];
   return new Promise((resolve, reject) => {
      let i = 0;
      next();
      function next() {
         if (i < arr.length) {
            arr[i].then((value) => {
               resultArr.push(value);
               i++;
               next();
            })
         } else {
            resolve(resultArr);
         }
      }
   })
}
var promise = new Promise((resolve, reject) => {
   setTimeout(resolve(1), 100);
});
var promise1 = new Promise((resolve, reject) => {
   setTimeout(resolve(2), 100);
});
var promiseArr = [promise, promise1];
var test = promiseAll(promiseArr);
test.then(value => console.log(value));//[1,2]

此实现思路就是对next函数进行递归调用,只有执行完一个Promise才会执行下一个,然后用计数器和数组长度进行比较,完成后返回一个带有value的promise,这只是一个简单版的实现,当然还有部分功能没有实现,就当做同学们的一个思考版吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值