顾名思义,Promise.race就是赛跑的意思,意思就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
Promise._race = promises => new Promise((resolve, reject) => {
promises.forEach(item => {
// resolve 是返回的 new Promise 的 resolve
// 如果 resolve/catch 被调用了,那么就直接返回了
Promise.resolve(item).then(resolve, reject);
})
})
补充
补充:
Promise.race接收一个 Promise 数组,返回最快"敲定"(fulfilled 或 rejected)的那个 Promise 的结果,后续结果被忽略。注意:
- 任一子 Promise 失败都会立即 reject 外层 Promise;
- 如果传入的数组为空,会一直处于 pending 状态(注意兼容问题,可手动用
Promise.resolve()占位)。
const timeout = new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 3000))
Promise.race([fetch('/api/data'), timeout])
.then(res => console.log(res))
.catch(err => console.error(err))
来源整理自:vue3js.cn 面试官系列



