# ❓ 设计并实现 Promise.race()

Promise.race() 方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。

const p = Promise.race([p1, p2, p3]);
1

上面代码中,只要 p1p2p3 之中有一个实例率先改变状态,p 的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给 p 的回调函数。

Promise.race()方法的参数与 Promise.all()方法一样,如果不是 Promise 实例,就会先调用下面讲到的 Promise.resolve()方法,将参数转为 Promise 实例,再进一步处理。

Promise.race = function (promises) {
  return new Promise((resolve, reject) => {
    const len = promises.length
    for (let i = 0; i < len; i++) {
      Promise.resolve(promises[i]).then(resolve, reject)
    }
  })
}
1
2
3
4
5
6
7
8