Heim >Web-Frontend >js-Tutorial >Wie kann ich alle Versprechen, auch die, die fehlschlagen, in JavaScript verarbeiten?
Promises unabhängig von Fehlern verarbeiten
Bei der Arbeit mit einer Reihe von Promises, die Netzwerkanfragen beinhalten, ist es oft notwendig, Szenarien zu bearbeiten, in denen einige Anfragen kann scheitern. Standardmäßig wird Promise.all() vorzeitig beendet, wenn die erste Ablehnung auftritt. In bestimmten Situationen möchten Sie jedoch möglicherweise warten, bis alle Versprechen abgeschlossen sind, auch diejenigen, die fehlgeschlagen sind.
Empfohlenes Muster
Ein Ansatz besteht darin, das zu verwenden reflekt()-Funktion, die ein Versprechen in ein Versprechen umwandelt, das in ein Statusobjekt mit entweder einer erfüllten oder abgelehnten Eigenschaft aufgelöst wird. Indem Sie die Promises in Ihrem Array der Funktion „reflect()“ zuordnen, können Sie sicherstellen, dass alle Promises unabhängig von ihrem Status abgeschlossen werden.
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" })); Promise.all(arr.map(reflect)).then(results => { const success = results.filter(x => x.status === "fulfilled"); });
In diesem Beispiel wird Promise.all() mit der Funktion „modified“ verwendet Reihe von Versprechen, die darauf warten, dass sie alle erfüllt werden. Das Erfolgsarray enthält die Ergebnisse der erfolgreichen Versprechen, sodass Sie Netzwerkausfälle ordnungsgemäß behandeln und dennoch Aktionen basierend auf den verfügbaren Daten ausführen können.
Verbesserte Lösung (Promise.allSettled)
In modernes JavaScript integriert ist Promise.allSettled, das eine präzisere und effizientere Möglichkeit bietet, das gewünschte Verhalten zu erreichen. Es gibt ein Versprechen zurück, das zu einer Reihe von Ergebnissen aufgelöst wird, von denen jedes unabhängig vom Ergebnis des Versprechens den Status „Erfüllt“ oder „Abgelehnt“ enthält.
Promise.allSettled([promise]).then(([result]) => { // reach here regardless // { status: "fulfilled", value: 33 } });
Das obige ist der detaillierte Inhalt vonWie kann ich alle Versprechen, auch die, die fehlschlagen, in JavaScript verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!