Heim >Web-Frontend >js-Tutorial >Wie kann ich in JavaScript mit mehreren Versprechen umgehen, auch mit abgelehnten?

Wie kann ich in JavaScript mit mehreren Versprechen umgehen, auch mit abgelehnten?

Susan Sarandon
Susan SarandonOriginal
2024-12-18 06:07:14898Durchsuche

How Can I Handle Multiple Promises, Including Rejected Ones, in JavaScript?

Umgang mit Versprechen mit gemischten Auflösungen

Bei der asynchronen Programmierung kann der Umgang mit Versprechenmengen eine Herausforderung darstellen. Stellen Sie sich ein Szenario vor, in dem Sie mehrere Netzwerkanforderungen haben und eine davon wahrscheinlich fehlschlägt. Standardmäßig stoppt Promise.all() den Prozess mit einem Fehler, sobald ein Versprechen abgelehnt wird. Dies ist möglicherweise nicht wünschenswert, wenn Sie Antworten auf alle Anfragen erfassen möchten.

Muster ohne Versprechensbibliothek

Eine Lösung ohne Verwendung einer Versprechensbibliothek besteht darin, jedes Versprechen mit zu verpacken eine „Spiegel“-Funktion. Diese Funktion gibt ein neues Versprechen zurück, das mit dem Wert oder Fehler des ursprünglichen Versprechens aufgelöst wird und eine „Status“-Eigenschaft enthält, die Erfolg oder Ablehnung angibt.

const reflect = p => p.then(v => ({ v, status: "fulfilled" }),
                            e => ({ e, status: "rejected" }));

Sie können dann jedes Versprechen einem Reflexionsversprechen und einem Aufruf zuordnen Promise.all() für das zugeordnete Array:

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");
});

Mit diesem Ansatz können Sie sowohl erfolgreiche als auch abgelehnte Versprechen verarbeiten anmutig.

Eingebautes Promise.allSettled()

Beachten Sie, dass moderne Browser und JavaScript-Umgebungen jetzt über eine native Promise.allSettled()-Methode verfügen, die ähnliche Funktionen bietet. Es gibt ein Versprechen zurück, das mit einer Reihe von Ergebnissen aufgelöst wird, die jeweils den Status und Wert (falls erfüllt) des entsprechenden ursprünglichen Versprechens darstellen.

Das obige ist der detaillierte Inhalt vonWie kann ich in JavaScript mit mehreren Versprechen umgehen, auch mit abgelehnten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn