Promise.all
and Promise.allSettled
sind beide Methoden in JavaScript, die zur Bewältigung mehrerer Versprechungen verwendet werden, aber sie unterscheiden sich in der Art und Weise, wie sie die Versprechen und die Ergebnisse, die sie zurückgeben, behandeln.
Promise.all
Der aufgelöste Wert des zurückgegebenen Versprechens ist ein Array der aufgelösten Werte der Eingabeversprechungen in der gleichen Reihenfolge wie im iterablen.
Auf der anderen Seite verspricht das Promise.allSettled
. Das zurückgegebene Versprechen löst, sobald alle Eingabeversprechen festgelegt wurden (entweder gelöst oder abgelehnt). Der aufgelöste Wert ist ein Array von Objekten, bei dem jedes Objekt das Ergebnis des entsprechenden Versprechens im iterablen beschreibt. Jedes Objekt verfügt über ein status
, das entweder "fulfilled"
ist (für ein gelöschtes Versprechen) oder "rejected"
(für ein Versprechen, das abgelehnt wurde), zusammen mit einem value
(für gelöstes Versprechen) oder einem reason
(für abgelehnte Versprechen).
Zusammenfassend lässt sich sagen, dass der Hauptunterschied darin besteht, wie diese Methoden versprechen: Promise.all
. Alle scheitern schnell und lehnen ab, sobald eines der Promise.allSettled
abgelehnt wird.
Promise.all
behandelt Versprechen Ablehnungen unterschiedlich als Promise.allSettled
. Bei Verwendung Promise.all
, wenn eines der Verheißungen im iterablen Ablehnung, das gesamte Promise.all
. Alle Verheißungen lehnt sofort ab. Der Ablehnungsgrund wird der Grund für das erste Versprechen sein, das abgelehnt wurde. Alle nachfolgenden Versprechen, ob sie lösen oder ablehnen, wirken sich nicht auf den Zustand des Promise.all
aus. Alle Versprechen, wie es bereits abgelehnt wurde.
Im Gegensatz dazu Promise.allSettled
nicht ab, wenn sie auf ein abgelehntes Versprechen stoßen. Stattdessen wartet es weiterhin auf alle Versprechen im iterablen, um entweder zu lösen oder abzulehnen. Sobald sich alle Versprechungen erfüllt haben, beschreibt das Promise.allSettled
Allsettled Promise mit einer Reihe von Objekten, die das Ergebnis jedes Versprechens beschreiben.
Um den Unterschied zu veranschaulichen, betrachten Sie ein Beispiel, bei dem Sie drei Versprechen haben: zwei, die sich schnell lösen und eine, die nach einer Verzögerung ablehnt. Mit Promise.all
würde das Versprechen abgelehnt, sobald das verspätete Versprechen ablehnt, auch wenn die anderen beiden Versprechen bereits gelöst sind. Mit Promise.allSettled
. Allsettled würde das Versprechen schließlich mit einem Array lösen, das darauf hinweist, dass zwei Versprechen gelöst und eine abgelehnt wurden.
Sie würden sich für Promise.allSettled
entscheiden Promise.all
Hier sind einige spezifische Szenarien:
Promise.allSettled
. Allsettled ist ideal. Sie können erfolgreiche Antworten verarbeiten, während Sie Fehler für fehlgeschlagene Anforderungen abwickeln.Promise.allSettled
Sie einen Stapelvorgang ausführen und den Status jeder Operation kennen, können Sie über den Status jeder Operation erfahren, welche Operationen erfolgreich sind und welche fehlgeschlagen sind, ohne den gesamten Prozess zu unterbrechen.Promise.allSettled
in der Sie Teilergebnisse anzeigen oder fehlerhaft verarbeiten möchten, können Sie alle verfügbaren Daten und Fehlermeldungen angezeigt werden, wodurch die Benutzererfahrung verbessert wird, indem Sie den ersten Fehler nicht anhalten.Promise.allSettled
oder überwachen müssen. Die Auswirkungen auf die Leistung von Promise.all
versus Promise.allSettled
können wie folgt zusammengefasst werden:
Promise.all
Alle können schneller auflösen, wenn sich alle Versprechen schnell lösen, aber es wird sofort abgelehnt, wenn ein Versprechen ablehnt. Dies kann in Szenarien von Vorteil sein, in denen eine frühzeitige Ablehnung wünschenswert ist, da sie die Verarbeitung weiter verarbeitet. Promise.allSettled
. Allsettled dagegen wird immer auf alle Versprechen warten, was länger dauern kann, wenn einige Versprechungen lange dauern, bis es ablehnt.Promise.all
Alle können weniger Ressourcen verwenden, da die Verarbeitung nicht mehr bearbeitet wird, sobald jedes Versprechen ablehnt. Promise.allSettled
wird weiterhin alle Versprechungen verarbeiten, bis sie sich niederlassen, und möglicherweise mehr Ressourcen verwenden, insbesondere wenn einige Versprechen langlebig oder ressourcenintensiv sind.Promise.all
. Sie müssen nur eine einzige Ablehnung verarbeiten, die in einigen Fällen die Fehlerbehandlung vereinfachen kann. Promise.allSettled
erfordert den Umgang mit einer Reihe von Ergebnissen, die möglicherweise eine komplexere Logik der Fehlerbehandlung beinhalten.Promise.allSettled
stellt sicher, dass alle Versprechen bis zur Fertigstellung ausgeführt werden. Dies kann in Szenarien vorteilhaft sein, in denen Sie die Ergebnisse aller Versprechungen benötigen, aber es kann ein Nachteil sein, wenn einige Versprechen nach einem anfänglichen Fehler nicht weiter verarbeitet werden können. Zusammenfassend Promise.allSettled
sich sagen, dass Promise.all
in bestimmten Situationen schneller und ressourceneffizienter sein kann. Die Wahl zwischen ihnen sollte auf den spezifischen Anforderungen Ihrer Anwendung basieren.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Versprechen.All und Versprechen.Allsettled?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!