JS知识图谱

JavaScript 完全知识体系

Promise.race

Promise.race 接收一个以 Promise 实例为成员的可迭代对象作为参数,当某个成员 Promise 状态变更后(无论是 Fulfilled 状态还是 Rejected 状态),立即调用相应的回调函数。

语法

Promise.race(iterator)
Promise.race([promise1, promise2, ..., promiseN])

Promise.all 相似,Promise.raceiterator 参数必须是 Iterator

只要参数 iterator 的其中某个 Promise 实例成员的状态变更,那么 Promise.race 会立即返回一个新创建的 Promise 实例,并将返回值传递给回调函数。

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

示例

下面例子中,如果 5 秒之内 fetch 方法无法返回结果,变量 p 的状态就会变为 Rejected,从而触发 .catch 方法指定的回调函数。

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