Ce face Promise.any
Promise.any ignoră erorile cât timp mai există o șansă de reușită și se împlinește cu prima valoare obținută. Este util când ai mai multe surse pentru aceleași date (servere de rezervă, oglinzi).
Dacă toate promisiunile sunt respinse, aruncă un AggregateError, care are în proprietatea errors toate erorile, în ordine.
Parametri
| Parametru | Descriere |
|---|---|
promisiuni |
Un iterabil cu promisiuni. |
Ce returnează
O Promise cu prima valoare reușită.
Exemple
Exemplul 1: Primul server care răspunde corect
const pauza = (ms, valoare) => new Promise((resolve) => setTimeout(() => resolve(valoare), ms));
const esec = (ms, mesaj) => new Promise((_, reject) => setTimeout(() => reject(new Error(mesaj)), ms));
const raspuns = await Promise.any([
esec(50, "server 1 căzut"),
pauza(200, "date de la server 2"),
pauza(120, "date de la server 3"),
]);
console.log(raspuns);
Rezultat
date de la server 3
Exemplul 2: Toate au eșuat
const esec = (ms, mesaj) => new Promise((_, reject) => setTimeout(() => reject(new Error(mesaj)), ms));
try {
await Promise.any([esec(30, "A"), esec(10, "B")]);
} catch (e) {
console.log(e.constructor.name, e.errors.map((x) => x.message));
}
Rezultat
AggregateError [ 'A', 'B' ]
Greșeli frecvente
- Confunzi
Promise.anycuPromise.race.racese oprește la primul rezultat, chiar dacă este o eroare;anyașteaptă primul succes.
Comenzi înrudite
Promise.race: Returnează rezultatul (sau eroarea) primei promisiuni care se termină.Promise.all: Așteaptă mai multe promisiuni în paralel și returnează toate rezultatele, în ordine; eșuează la prima eroare.Promise.allSettled: Așteaptă toate promisiunile, reușite sau eșuate, și returnează starea fiecăreia.