Beide nehmen eine wiederholbar und geben Sie ein Array zurück, das die erfüllten enthält Promises.
Also, was ist der Unterschied zwischen ihnen?
all hingerichtet wird für Aufgelöst Versprechen, allSettled sind alle fertig – gelöst und verworfen. Der erste Satz jedes Artikels umreißt diesen Unterschied.
– VLAZ
17. Januar 2020 um 9:08 Uhr
@Raymond Auf welche Website verweisen Sie??
– aeXuser264
17. Januar 2020 um 9:12 Uhr
und ein Array zurückgeben Keiner von ihnen gibt ein Array zurück, sie geben ein Promise zurück, das möglicherweise in ein Array aufgelöst werden könnte … aber im Fall von .all Das zurückgegebene Versprechen löst sich nicht immer in ein Array auf – es steht direkt in der ersten Zeile der Dokumentation – lesen Sie tatsächlich den ersten Absatz jeder Dokumentation, auf die Sie verlinkt haben, und Sie haben Ihre Antwort
– Jaromanda X
17. Januar 2020 um 10:25 Uhr
Danke an alle, ich habe die Antwort bekommen. Und jetzt werde ich Handbücher mit mehr Fokus lesen.
– aeXuser264
17. Januar 2020 um 10:28 Uhr
Bestimmte Leistung
Promise.all wird so schnell wie möglich ablehnen eines der Promises im Array lehnt ab.
Promise.allSettled wird nie ablehnen – es wird einmal gelöst alle Promises im Array wurden entweder abgelehnt oder aufgelöst.
Ihre Auflösungswerte sind ebenfalls unterschiedlich. Promise.all wird in ein Array von jedem der Werte aufgelöst, in die die Promises aufgelöst werden – z [Promise.resolve(1), Promise.resolve(2)] wird sich verwandeln [1, 2]. Promise.allSettled wird dir stattdessen geben [{ status : 'fulfilled', value: 1 }, { status : 'fulfilled', value: 2 }].
Lehnt man eines der Promises ab, wird das Promise.all wird mit einem Wert der Ablehnung abgelehnt, aber Promise.allSettled wird mit einem Objekt von aufgelöst { status: 'rejected', reason: <error> } an dieser Stelle im Array.
Versprechen.all: Es wird nur aufgelöst, wenn alle An ihn übergebene Versprechen (als Array) werden aufgelöst, andernfalls wird er mit dem abgelehnt Erste Zurückgewiesener Versprechungsfehler.
Alles versprochen: Dieser wird stets mit einem Array aufgelöst werden, das Informationen über aufgelöst enthält und abgelehnte Versprechungen. Sehen Sie sich folgende Eigenschaften genau an (Status, Wert, Grund ) des resultierenden Arrays.
Beispiel 1:
const pms1 = Promise.resolve(1);
// setTimeout(function, milliseconds, param1, param2, ...)
const pms2 = new Promise((resolve, reject) => {
setTimeout(resolve, 200, 2);
});
const pms3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 3);
});
const pmsAry = [pms1, pms2, pms3];
Promise.all(pmsAry)
.then(resAry => console.log(resAry)) // resAry order is same as pmsAry order
.catch(error => console.log(error));
/*
* Note here we are not writing 'catch' because Promise.allSettled ALWAYS RESOLVES
* with array containing information about resolved or rejected promises
*/
Promise.allSettled(pmsAry)
.then(resAry => console.log(resAry)); // resAry order is same as pmsAry order
Ausgabe :
[1, 2, 3]
// Promise.all output ORDER doesn't depend on promise resolution time
[{ status: "fulfilled", value: 1 },
{ status: "fulfilled", value: 2 },
{ status: "fulfilled", value: 3 }]
// Promise.allSettled output ORDER doesn't depend on promise resolution time
100ms Err
/*
* Note: Here there are TWO promises which are getting REJECTED but output is
* ONLY ONE (i.e the one which is getting rejected FIRST)
*/
[{ status: "fulfilled", value: 1 }, // Note: value
{ status: "rejected", reason: "200ms Err" },
{ status: "rejected", reason: "100ms Err" }] // Note: reason
Wenn Sie sicherstellen möchten, dass das Versprechen für die von Ihnen verwendete Operation vollständig aufgelöst/erfolgreich ist, müssen Sie verwenden Promise.all da es abgeschlossen ist, wenn es für jedes der Versprechen gelöst wird.
Aber wenn Sie nur alle Versprechen erfüllen möchten, unabhängig davon, ob sie gelöst oder abgelehnt wurden, dann verwenden Sie Promise.allSettled.
Beide führen Versprechen in großen Mengen aus, aber der feine Unterschied besteht in der Art und Weise, wie sie mit den Versprechen-Iterationen umgehen.
“Der feine Unterschied ist die Art und Weise, wie sie mit den Versprechen-Iterationen umgehen”, bedeutet das, dass die Ausführungsreihenfolge in allSettled nicht gleichzeitig ist? zB versprechen1 dann versprechen2 dann versprechen3 etc …
– Zur Figur
27. Januar 2021 um 11:58 Uhr
Versprechen.all : Es gibt ein Promise zurück, das aufgelöst wird, wenn alle Promises aus einem Array aufgelöst sind, und zurückgewiesen wird, wenn ein oder mehrere Promises abgelehnt werden.
Versprochen.allesErledigt : Es gibt ein Promise zurück, das aufgelöst wird, wenn alle Promises im Array erfüllt (abgelehnt oder aufgelöst) sind.
Notiz : Beide nehmen ein Iterable und geben ein Array zurück, das die erfüllten Promises enthält.
14040700cookie-checkUnterschiede zwischen Promise.all() und Promise.allSettled() in JS?yes
all
hingerichtet wird für Aufgelöst Versprechen,allSettled
sind alle fertig – gelöst und verworfen. Der erste Satz jedes Artikels umreißt diesen Unterschied.– VLAZ
17. Januar 2020 um 9:08 Uhr
@Raymond Auf welche Website verweisen Sie??
– aeXuser264
17. Januar 2020 um 9:12 Uhr
und ein Array zurückgeben Keiner von ihnen gibt ein Array zurück, sie geben ein Promise zurück, das möglicherweise in ein Array aufgelöst werden könnte … aber im Fall von
.all
Das zurückgegebene Versprechen löst sich nicht immer in ein Array auf – es steht direkt in der ersten Zeile der Dokumentation – lesen Sie tatsächlich den ersten Absatz jeder Dokumentation, auf die Sie verlinkt haben, und Sie haben Ihre Antwort– Jaromanda X
17. Januar 2020 um 10:25 Uhr
Danke an alle, ich habe die Antwort bekommen. Und jetzt werde ich Handbücher mit mehr Fokus lesen.
– aeXuser264
17. Januar 2020 um 10:28 Uhr