Promise.race 是什么?请实现 Promise.race

2022年10月6日

💎 加入 E+ 成長計畫 與超過 350+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

Promise.race() 是什么?

要实现这个方法前,我们要先知道它在做什么。根据 MDN 的定义Promise.race()

  • 接收一个内有多个 promises 的 Iterable ,例如 Array、Map、Set。
  • 回传最先 fulfill 或最先被 reject 的那一个

如何实现 Promise.race()

我们先直接看代码,看看你能了解多少。有不懂的地方也不担心,下面会透过注解,一行行解释:

function promiseRace(promises) {
  return new Promise((resolve, reject) => {
    for (const p of promises) {
      p.then((val) => {
        resolve(val);
      }).catch((e) => {
        reject(e);
      });
    }
  });
}

让我们透过以下代码与注解来看如何实现吧:

function promiseRace(promises) {
  return new Promise((resolve, reject) => {
    // 迭代过 promises
    for (const p of promises) {
      p.then((val) => {
        // 只要有 fulfill 的,就马上 resolve
        resolve(val);
      }).catch((e) => {
        // 或是只要有 reject 的,就马上 reject
        reject(e);
      });
    }
  });
}
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們