# ❓ 设计并实现 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