Promise.race 是什麼?如何實踐 Promise.race?

2024年3月8日

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

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 上追蹤我們