回顾 Promise.race 的定义
Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
关键点:
- 接受的是 promise 类数组
- 返回一个 promise 实例
- 返回的 promise 实例的 resolve 或 reject 的回调结果要求都是最先得到的
具体实现
function myPromiseRace(promiseArr) {
// 如果传入的参数不是可迭代类型
if (promiseArr[Symbol.iterator] === undefined) {
return Promise.reject("params is not a iteratorable type")
}
// 转为数组进行遍历
promiseArr = Array.from(promiseArr);
return new Promise((resolve, reject) => {
for(let promise of promiseArr) {
promise.then(res=>{
resolve(res);
}).catch(err=>{
reject(err);
})
}
})
}
使用一下:
const pArr = [
Promise.resolve(1),
new Promise(resolve=>{
setTimeout(()=>{
resolve(2);
},200)
}),
Promise.resolve(3),
]
const pArr_1 = [
new Promise(resolve=>{
setTimeout(()=>{
resolve(1);
},200)
}),
Promise.reject(2),
]
myPromiseRace(pArr).then(res=>{
console.log(res);
}).catch(err=>{
console.log(err);
})
// 1
myPromiseRace(pArr_1).then(res=>{
console.log(res);
}).catch(err=>{
console.log(err);
})
// 2
myPromiseRace(Promise.resolve(1)).then(res=>console.log(res)).catch(err=>console.log(err));
// params is not a iteratorable type
网友评论