promise.all功能
promise.all(iterable)返回一个新的 promise 实例,在 iterable 实例中,当所有的 promise 都是 fulfilled 时或者含有参数不包含 promise 时,状态会变成 fulfilled.如果参数中有一个变成 rejected ,此实例回调失败,失败原因是第一个 Promise 失败结果。
let p = promise.all(p1,p2,p3);
p 的状态由 p1,p2,p3 决定,分成以下情况
- 只有当 p1, p2, p3 都为 fulfilled 的时候,p 的状态才会为 fulfilled,此时 p1, p2, p3 的返回值组成一个数组,传递给 p 的回调。
- 只要 p1, p2, p3 中有一个被 rejected, p 的 状态就会变成 rejected, 此时第一个被rejected 的实例会的返回值,会传递给 p 的回调函数。
promise的特点
promise.all的返回值是一个 promise 实例
promise.all = function(prom){
return new Promise((resolve, reject) => {
let index = 0;
let result = [];
if (prom.length === 0) {
resolve(result);
} else {
function processValue(i, data){
result[i] = data;
if (++index === prom.length) {
resolve(result);
}
for (let i = 0; i < prom.length; i++) {
Promise.resolve(prom[i]).then((data) => {
processValue(i, data);
}, (err) => {
reject(err);
return;
})
}
}
}
});
}