js手写实现 Promise.all

实现 Promise.all

对于 all 方法而言,需要完成下面的核心功能:

传入参数为一个空的可迭代对象,则直接进行resolve。

如果参数中有一个promise失败,那么Promise.all返回的promise对象失败。 在任何情况下,Promise.all 返回的;

promise 的完成状态的结果都是一个数组;

Promise.all = function(promises) {
  return new Promise((resolve, reject) => {
    let result = [];
    let index = 0;
    let len = promises.length;
    if(len === 0) {
      resolve(result);
      return;
    }
   
    for(let i = 0; i < len; i++) {
      // 为什么不直接 promise[i].then, 因为promise[i]可能不是一个promise
      Promise.resolve(promise[i]).then(data => {
        result[i] = data;
        index++;
        if(index === len) resolve(result);
      }).catch(err => {
        reject(err);
      })
    }
  })
}

相关推荐

  1. js实现 Promise.all

    2024-03-15 13:08:03       47 阅读
  2. 实现instanceof

    2024-03-15 13:08:03       23 阅读
  3. jsPromise.prototype.finally

    2024-03-15 13:08:03       45 阅读
  4. js并发请求控制

    2024-03-15 13:08:03       39 阅读
  5. 实现防抖

    2024-03-15 13:08:03       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-15 13:08:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-15 13:08:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-15 13:08:03       87 阅读
  4. Python语言-面向对象

    2024-03-15 13:08:03       96 阅读

热门阅读

  1. Babel 7.24.0 出来了!

    2024-03-15 13:08:03       36 阅读
  2. go生成terraform .tf配置

    2024-03-15 13:08:03       40 阅读
  3. 程序员如何选择职业赛道?

    2024-03-15 13:08:03       43 阅读
  4. docker套娃实践(待续)

    2024-03-15 13:08:03       42 阅读
  5. Docker使用及部署流程

    2024-03-15 13:08:03       38 阅读