美文网首页
JavaScript - promise.race()及实现

JavaScript - promise.race()及实现

作者: ElricTang | 来源:发表于2019-10-27 17:15 被阅读0次

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
});

相关文章

网友评论

      本文标题:JavaScript - promise.race()及实现

      本文链接:https://www.haomeiwen.com/subject/ouqmvctx.html