Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
特点:
1. 参数是一个可迭代对象
2. 只要给定的迭代中的一个promise解决或拒绝,就采用第一个promise的值作为它的值。
3. 返回的也是Promise
简单实现
- 参数应该是一个可迭代对象,这里用数组简单模拟
function isPromise(obj) {
return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
}
const myPromiseRace = (arr)=>{
return new Promise((resolve,reject)=>{
if(arr.length === 0){
return
}else{
for(let item of arr){
if(isPromise(item)){
item.then((data)=>{
resolve(data);
},reject);
}else{
resolve(item);
}
}
}
})
}
- 测试
var promise1 = new Promise(function(resolve, reject) {
setTimeout(resolve, 500, 'one');
});
var promise2 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'two');
});
myPromiseRace([promise1, promise2]).then(function(value) {
console.log(value);// two
});
网友评论