认识 Promise.race方法
Promise.race()
方法同样是将多个 Promise
实例,包装成一个新的 Promise 实例。
const p = Promise.race([p1, p2, p3]);
-
上面代码中,只要
p1
、p2
、p3
之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise
实例的返回值,就传递给p
的回调函数。 -
Promise.race()
方法的参数与Promise.all()
方法一样,如果不是Promise
实例,就会先调用下面讲到的Promise.resolve()
方法,将参数转为Promise
实例,再进一步处理。
下面是一个例子,如果指定时间内没有获得结果,就将Promise
的状态变为reject
,否则变为resolve
。
const p = Promise.race([
fetch('/resource-that-may-take-a-while'),
new Promise(function (resolve, reject) {
setTimeout(() => reject(new Error('request timeout')), 5000)
})
]);
p
.then(console.log)
.catch(console.error);
- 上面代码中,如果 5 秒之内
fetch
方法无法返回结果,变量p
的状态就会变为rejected
,从而触发catch
方法指定的回调函数。