如何通过代码实现 Promise.race

72 阅读1分钟

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