JavaScript - promise.race()及实现

2019-10-27  本文已影响0人  ElricTang

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
});
上一篇 下一篇

猜你喜欢

热点阅读