一起手写吧!promise.all
2024-09-04 05:29:43
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
数组中任何一个 promise
为 reject
的话,则整个 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(e);
});
总结 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)
}
})
}
最新文章
- Python成长笔记 - 基础篇 (十二)
- PHP学习第一天笔记——php的基本语法
- jquery获取多重input的方式
- BZOJ3165 : [Heoi2013]Segment
- 一个Itextsharp 批量添加图片到pdf 方法
- mybatis处理单表多表操作以及动态sql和批量操作
- WeixinJSBridge:微信浏览器内置JavaScript 对象
- birkenfeld / sphinx-contrib — Bitbucket
- JBoss配置解决高并发连接异常问题(转)
- node传统读取文件和promise,async await,
- OutOfMemoryError 到底能不能被捕获?
- Ubuntu安装python3虚拟环境
- Spring源码阅读(一)
- user_agent
- 《转载》IntelliJ 2016.2 IDEA 中进行 Java Web 项目开发配置
- JAVA交换两个变量的值-(不使用第三变量)
- 初识Trie_对Trie的一些认识
- AngularJS 讲解,二 模块
- Docker 镜像的制作和使用
- css 单行和多行文本溢出显示省略号