博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现promise.all方法
阅读量:7052 次
发布时间:2019-06-28

本文共 1722 字,大约阅读时间需要 5 分钟。

Promise.all 接收一个 promise 对象的数组作为参数,当这个数组里的所有 promise 对象全部变为resolve或 有 reject 状态出现的时候,它才会去调用 .then 方法,它们是并发执行的。

var p1 = Promise.resolve(1),    p2 = Promise.resolve(2),    p3 = Promise.resolve(3);Promise.all([p1, p2, p3]).then(function (results) {    console.log(results);  // [1, 2, 3]});复制代码

在上面的方法中,promise 数组中所有的 promise 实例都变为resolve 的时候,该方法才会返回,并将所有结果传递 results 数组中。promise 数组中任何一个 promisereject 的话,则整个 Promise.all 调用会立即终止,并返回一个 reject 的新的 promise 对象。reject 使用示例如下:

var p1 = Promise.resolve(1),    p2 = Promise.reject(2),    p3 = Promise.resolve(3);Promise.all([p1, p2, p3]).then(function (results) {    //then方法不会被执行    console.log(results);}).catch(function (e){    //catch方法将会被执行,输出结果为:2    console.log(2);});复制代码

总结 promise.all 的特点

1、接收一个 Promise 实例的数组或具有 Iterator 接口的对象,

2、如果元素不是 Promise 对象,则使用 Promise.resolve 转成 Promise 对象

3、如果全部成功,状态变为 resolved,返回值将组成一个数组传给回调

4、只要有一个失败,状态就变为 rejected,返回值将直接传递给回调

all() 的返回值也是新的 Promise 对象

实现 Promise.all 方法

function promiseAll(promises) {  return new Promise(function(resolve, reject) {    if (!isArray(promises)) {      return reject(new TypeError('arguments must be an array'));    }    var resolvedCounter = 0;    var promiseNum = promises.length;    var resolvedValues = new Array(promiseNum);    for (var i = 0; i < promiseNum; i++) {      (function(i) {        Promise.resolve(promises[i]).then(function(value) {          resolvedCounter++          resolvedValues[i] = value          if (resolvedCounter == promiseNum) {            return resolve(resolvedValues)          }        }, function(reason) {          return reject(reason)        })      })(i)    }  })}复制代码

原文:https://segmentfault.com/a/1190000010765655

转载于:https://juejin.im/post/5c3d702ee51d4551b747f0ac

你可能感兴趣的文章
Java util包中常用的类和方法
查看>>
[R] 之 管理工作空间函数
查看>>
将windows目录共享到linux
查看>>
计算机是如何启动的
查看>>
Python的raw_input语句包含中文,在Windows环境CMD中显示乱码的解决方法
查看>>
HIbernate学习笔记3 之 缓存和 对象的三种状态
查看>>
2015.3.12Arinc424 Tools中SiniArincCls.csParserFile(string sFile)函数正则表达式理解
查看>>
angularjs探秘<三> 控制器controller及angular项目结构
查看>>
列表的常用操作符和BIF
查看>>
opencv里面CV_32FC1家族
查看>>
在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试
查看>>
JavaScript操作DOM的那些坑
查看>>
Acdream Path 动态规划
查看>>
手机版开发框架集合
查看>>
Memcache的客户端连接系列(二) Python
查看>>
shell 环境变量
查看>>
安装xampp二三事
查看>>
2019-04-09 SpringBoot+Druid+MyBatis+Atomikos 的多数据源配置
查看>>
分解质因数
查看>>
字符型图片验证码识别完整过程及Python实现
查看>>