# ❓ 设计并实现 Promise.race()
Promise.race() 方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。
const p = Promise.race([p1, p2, p3]);
1
上面代码中,只要 p1、p2、p3 之中有一个实例率先改变状态,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
2
3
4
5
6
7
8