Promise.race 是什麼?如何實踐 Promise.race?
2024年3月8日
💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容
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);
});
}
});
}