Ce face Promise.allSettled
Spre deosebire de Promise.all, Promise.allSettled nu este niciodată respinsă. Așteaptă ca fiecare promisiune să se termine și returnează un tablou de obiecte: { status: "fulfilled", value } pentru cele reușite și { status: "rejected", reason } pentru cele eșuate.
Este potrivit când operațiile sunt independente și vrei să știi ce a mers și ce nu, de exemplu la trimiterea mai multor notificări.
Parametri
| Parametru | Descriere |
|---|---|
promisiuni |
Un iterabil cu promisiuni sau valori. |
Ce returnează
O Promise cu tabloul stărilor.
Exemple
Exemplul 1: Reușite și eșecuri
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 rezultate = await Promise.allSettled([
pauza(100, "email trimis"),
esec(50, "SMS eșuat"),
pauza(80, "notificare trimisă"),
]);
console.log(rezultate.map((r) => r.status));
for (const r of rezultate) {
console.log(r.status === "fulfilled" ? r.value : `Eroare: ${r.reason.message}`);
}
Rezultat
[ 'fulfilled', 'rejected', 'fulfilled' ]
email trimis
Eroare: SMS eșuat
notificare trimisă
Greșeli frecvente
- Citești
r.valuefără să verificir.status. Pentru promisiunile respinse,valuenu există; eroarea este înreason.
Comenzi înrudite
Promise.all: Așteaptă mai multe promisiuni în paralel și returnează toate rezultatele, în ordine; eșuează la prima eroare.Promise.any: Returnează rezultatul primei promisiuni reușite; eșuează doar dacă toate eșuează.try / catch: Prinde erorile, ca programul să nu se oprească și să poți afișa un mesaj clar.