手写 Promise.race

919 阅读1分钟

Promise.race 功能描述

  • Promise.race 函数返回一个 Promise 实例
  • Promise.race 将返回第一个完成的 Promise 实例,如果最快的 Promise 成功,则 Promise.race 就成功,如果最快的 Promise 失败,则 Promise.race 就失败。

Promise.race 手写代码实现

function myPromiseRace(promises){
  return new Promise(function(resolve, reject){
    for(const promise of promises){
      // 当第一个 promise 成功或失败时返回结果
      Promise.resolve(promise).then(resolve, reject);
    }
  });
}

测试

const p1 = new Promise((resolve, reject)=>{
  setTimeout(()=>{
    resolve('p1 延时一秒')
  }, 1000);
});

const p2 = new Promise((resolve, reject)=>{
  setTimeout(()=>{
    resolve('p2 延时两秒')
  }, 2000);
});

myPromiseRace([p1,p2]).then(res=>console.log(res)).catch(err=>console.log(err));
// 1秒后打印   p1 延时一秒
const p1 = new Promise((resolve, reject)=>{
  setTimeout(()=>{
    resolve('p1 延时一秒')
  }, 1000);
});

const p2 = new Promise((resolve, reject)=>{
  setTimeout(()=>{
    resolve('p2 延时两秒')
  }, 2000);
});

const p3 = new Promise((resolve, reject)=>{
  setTimeout(()=>{
    reject('p3 rejected 延时500ms')
  }, 500);
});

myPromiseRace([p1,p2,p3]).then(res=>console.log(res)).catch(err=>console.log(err));
// 500ms后打印   p3 rejected 延时500ms