目录
- all实现
- race实现
一、all实现
Promise.all1 = promiseArr => {
let result = [];
let count = 0;
return new Promise((resolve, reject) => {
for (let i = 0; i < promiseArr.length; i++) {
Promise.resolve(promiseArr[i]).then(
res => {
result[i] = res;
count++;
if (count === promiseArr.length) {
resolve(result);
}
},
err => {
reject(err);
}
);
}
});
};
1) 测试 有一个reject
const p1 = Promise.resolve(1)
const p2 = Promise.reject(2)
const p3 = Promise.resolve(100)
Promise.all1([p1,p2,p3]).then(data=>{
console.log('resolve:',data)
},err=>{
console.log('then 中 reject:',err)
}).catch(err=>{
console.log('catch 中 reject:',err)
}).then(a=>{console.log(1,a)})
2) 测试 全部resolve
const p1 = Promise.resolve(1)
const p2 = Promise.resolve(2)
const p3 = Promise.resolve(100)
Promise.all1([p1,p2,p3]).then(data=>{
console.log('resolve:',data)
},err=>{
console.log('then 中 reject:',err)
}).catch(err=>{
console.log('catch 中 reject:',err)
}).then(a=>{console.log(1,a)})
二、race实现
Promise.race1(promiseArr) {
return new Promise((resolve, reject) => {
for (let i = 0; i < promiseArr.length; i++) {
Promise.resolve(promiseArr[i]).then(
(res) => {
resolve(res);
},
(err) => {
reject(err);
}
);
}
});
}
}
1)测试
const p1 = new Promise((resolve, reject) => {
setTimeout(reject, 3000, '1');
});
const p2 = new Promise((resolve, reject) => {
setTimeout(reject, 2000, '2');
});
const p3 = new Promise((resolve, reject) => {
setTimeout(reject, 1000, '3');
});
Promise.race([p1,p2,p3]).then(data=>{
console.log('resolve:',data)
},err=>{
console.log('then 中 reject:',err)
}).catch(err=>{
console.log('catch 中 reject:',err)
})
总结
return new Promise
返回一个Promise的目的是为了 链式调用
后续可以调用Promise原型
上的then 和 catch
方法