Promise.race 是什么?请实现 Promise.race
2022年10月6日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
Promise.race() 是什么?
要实现这个方法前,我们要先知道它在做什么。根据 MDN 的定义,Promise.race()
会
- 接收一个内有多个 promises 的
Iterable
,例如 Array、Map、Set。 - 回传最先 fulfill 或最先被 reject 的那一个
如何实现 Promise.race()
我们先直接看代码,看看你能了解多少。有不懂的地方也不担心,下面会透过注解,一行行解释:
function promiseRace(promises) {
return new Promise((resolve, reject) => {
for (const p of promises) {
p.then((val) => {
resolve(val);
}).catch((e) => {
reject(e);
});
}
});
}
让我们透过以下代码与注解来看如何实现吧:
function promiseRace(promises) {
return new Promise((resolve, reject) => {
// 迭代过 promises
for (const p of promises) {
p.then((val) => {
// 只要有 fulfill 的,就马上 resolve
resolve(val);
}).catch((e) => {
// 或是只要有 reject 的,就马上 reject
reject(e);
});
}
});
}