1.promise .all手写
Promise.all 方法接受一个数组作为参数,
(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
Promise.all = function(promises) {
return new Promise((resolve, reject) => {
//声明计数变量
let count = 0;
//声明数组保存promise数组返回结果
let arr = [];
for (let i = 0; i < promises.length; i++) {
//既然是一个promise对象,一定可以调用then方法
promises[i].then(v => {
//如果成功就调用这个回调函数
//得知对象状态是成功
//每个promise对象都成功,才可以调用
count++;
//将当前promise成功对象存入数组中
arr[i] = v;
//判断
if (count === promises.length) {
//都成功就可以调用成功函数
resolve(arr);
}
}, r => {
reject(r);
})
}
})
}
2.promise.race方法手写
p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的返回值。
Promise.race = function(promises) {
return new Promise((resolve, reject) => {
for (let i = 0; i < promises.length; i++) {
promises[i].then(v => {
resolve(v)
}, r => {
reject(r)
})
}
})
}
本文含有隐藏内容,请 开通VIP 后查看