Bei der asynchronen Programmierung kann der Umgang mit Versprechen eine Herausforderung darstellen, wenn einige Aufgaben fehlschlagen. Betrachten wir das folgende Szenario:
const arr = [fetch('index.html'), fetch('http://does-not-exist')]; Promise.all(arr) .then(res => console.log('success', res)) .catch(err => console.log('error', err)); // This is executed
Der obige Code stellt Netzwerkanfragen per Fetch durch. Da Promise.all jedoch bei der ersten fehlgeschlagenen Anfrage ablehnt, stoßen wir auf ein Problem: Wie können wir mit den Ergebnissen aller Aufgaben umgehen, auch mit denen, die fehlgeschlagen sind?
An Um dieses Problem zu lösen, können wir die folgenden nativen JavaScript-Techniken einsetzen:
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" }));
Diese Reflektierungsfunktion gibt ein neues Versprechen zurück, das in ein Objekt aufgelöst wird, das entweder den aufgelösten Wert oder den Ablehnungsgrund enthält, zusammen mit einer Statuseigenschaft, die den Status des Versprechens angibt.
var arr = [fetch('index.html'), fetch('http://does-not-exist')]; Promise.all(arr.map(reflect)).then(function(results){ var success = results.filter(x => x.status === "fulfilled"); });
In diesem Beispiel wenden wir „reflect“ auf jedes Versprechen im Array an. Das resultierende Array enthält nun ein Objekt mit Status- und Fehler- oder Werteigenschaften für jede Anfrage.
Für eine moderne Lösung sollten Sie die Verwendung des integrierten Promise.allSettled in Betracht ziehen :
Promise.allSettled([promise]).then(([result]) => { // Code will execute regardless of the promise's state // { status: "fulfilled", value: 33 } });
Diese Methode bietet eine bequeme Möglichkeit, alle erfüllten Versprechen zu handhaben, unabhängig von ihrem Ergebnis.
Durch Hebelwirkung Mit diesen Techniken können Sie asynchrone Vorgänge elegant verwalten und auf die Ergebnisse aller Versprechen zugreifen, auch auf diejenigen, die fehlschlagen, sodass Sie fundierte Entscheidungen auf der Grundlage der verfügbaren Daten treffen können.
Das obige ist der detaillierte Inhalt vonWie kann ich alle Versprechen, auch die abgelehnten, in asynchronem JavaScript verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!