ES6——Promise.all实现

继上一篇文章手写实现Promise,下面我们来实现一个Promise.all,简单来说就是把所有要执行的函数都放进一个数组里面,然后数组以次以同步的形式一个一个执行,执行结束后能够接着执行then里面的东西。这也是2018阿里校招的编程测试题,很遗憾一开始没能看出来是要实现一个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) {    //如果函数数组中的函数都执行完,便把结果数组传给then
            resolve(aResult);
          } else {
            next();
          }
        })
      }
    })
  };

里面的function next()看起来像是一个循环,但实际上是一个递归调用,只有数组前一个执行完了,才能执行下一个,如果用循环的话,无法控制下一个的执行。

在这里有一个要点,也是Promise.all本身有的,传进Promise.all的数组元素,必须都是一个Promise对象,否则是无法实现调用的

 

 

你可能感兴趣的:(js基础原理)