Ce face Promise.race
Promise.race se termină la fel ca prima promisiune care se termină: împlinită dacă aceea reușește, respinsă dacă aceea eșuează. Celelalte continuă în fundal, dar rezultatul lor este ignorat.
Folosirea clasică este limita de timp: întreci operația cu o promisiune care eșuează după câteva secunde. Pentru fetch, varianta modernă este AbortSignal.timeout, care oprește cu adevărat cererea.
Parametri
| Parametru | Descriere |
|---|---|
promisiuni |
Un iterabil cu promisiuni. |
Ce returnează
O Promise care se termină ca prima promisiune terminată.
Exemple
Exemplul 1: Limită de timp pentru o operație
const pauza = (ms, valoare) => new Promise((resolve) => setTimeout(() => resolve(valoare), ms));
const esec = (ms, mesaj) => new Promise((_, reject) => setTimeout(() => reject(new Error(mesaj)), ms));
async function cuLimita(promisiune, ms) {
return Promise.race([promisiune, esec(ms, `Depășit timpul de ${ms} ms`)]);
}
console.log(await cuLimita(pauza(100, "rapid"), 500));
try {
await cuLimita(pauza(800, "lent"), 300);
} catch (e) {
console.log(e.message);
}
Rezultat
rapid
Depășit timpul de 300 ms
Greșeli frecvente
- Te aștepți ca operațiile pierzătoare să fie oprite.
racedoar ignoră rezultatul lor; pentru oprire foloseșteAbortController.
Comenzi înrudite
Promise.any: Returnează rezultatul primei promisiuni reușite; eșuează doar dacă toate eșuează.AbortController / AbortSignal.timeout: Oprește o cerere fetch sau altă operație asincronă: la comandă, după un timp sau la primul dintre mai multe semnale.setTimeout / setInterval: Rulează o funcție după o pauză (setTimeout) sau în mod repetat, la intervale egale (setInterval).