6、promise.race
Promise.race() 静态方法接受一个 promise 可迭代对象作为输入,并返回一个 Promise
。这个返回的 promise 会随着第一个 promise 的敲定而敲定。
比如说:
// 原生promiserace;
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("p1");
}, 500);
});
const p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("p2");
}, 100);
});
Promise.race([p1, p2]).then((value) => {
console.log(value); //p1
});
手写promise.race:
- 输入可迭代的数组
- 输出返回应该promise
- 第一个完成的话就要全部结束,所以我们要设定标志词
- 如果传入的不是promise怎么办,使用promise.relove将每个元素转换为Promise,以处理非Promise的情况。
代码如下:
// promise.race
static race(array){
// 判断是否为空
if(array.length === 0){
return ;
}
// 返回应该鑫的promise
return new Commitment((resolve , reject) => {
// 标志
let close = false;
// 开始遍历
array.forEach((item) =>{
Promise.resolve(item).then((res) => {
if(!close){
close = true;
resolve(res);
}
}).catch((error) => {
if(!close){
close = true;
reject(error);
}
})
})
})
}
志词
- 如果传入的不是promise怎么办,使用promise.relove将每个元素转换为Promise,以处理非Promise的情况。
代码如下:
// promise.race
static race(array){
// 判断是否为空
if(array.length === 0){
return ;
}
// 返回应该鑫的promise
return new Commitment((resolve , reject) => {
// 标志
let close = false;
// 开始遍历
array.forEach((item) =>{
Promise.resolve(item).then((res) => {
if(!close){
close = true;
resolve(res);
}
}).catch((error) => {
if(!close){
close = true;
reject(error);
}
})
})
})
}