Arbeit mit Promise-Arrays in JavaScript

Jetzt werden wir zwei nützliche Methoden besprechen, die es ermöglichen, mit Promise-Arrays zu arbeiten. Die Methode Promise.all ermöglicht es, Code auszuführen, nachdem alle Promises, die ihr in Form eines Arrays übergeben wurden, abgeschlossen sind. Die Methode Promise.race wartet auf den Abschluss des ersten Promises aus dem Array und verwirft die restlichen.

Beide Methoden geben ein neues Promise als Ergebnis zurück. Für die Methode Promise.all wird das Ergebnis dieses Promises ein Array mit den Ergebnissen aller übergebenen Promises sein (die Reihenfolge der Ergebnisse entspricht der Reihenfolge der Promises im Array), während es für Promise.race das Ergebnis des ersten erfüllten Promises ist.

Lasst es uns in der Praxis betrachten. Nehmen wir an, wir haben ein Array von Promises:

javascriptlet promises = [
  new Promise(resolve => setTimeout(() => resolve(1), 1000)),
  new Promise(resolve => setTimeout(() => resolve(2), 2000)),
  new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];

Lasst uns mit Promise.all warten, bis alle Promises aus unserem Array abgeschlossen sind:

javascriptPromise.all(promises).then(function(res) {
  console.log(res); // gibt [1, 2, 3] aus - die Ergebnisse aller Promises
});

Und jetzt lasst uns mit Promise.race warten, bis der erste der Promises abgeschlossen ist:

javascriptPromise.race(promises).then(function(res) {
  console.log(res); // gibt 1 aus - das Ergebnis des ersten erfüllten Promises
});

Wenn mindestens eines der Promises im Array abgelehnt wird, geht das Promise mit dem Ergebnis sofort in den Zustand rejected über. Daher kann die aufgetretene Ausnahme auf die übliche, bereits von Ihnen erlernte Weise abgefangen werden, beispielsweise über catch:

javascriptPromise.all(promises).then(function(res) {
  console.log(res);
}).catch(function(err) {
  console.log(err);
});
Задание 1

Erstellen Sie eine Funktion, die ein Promise zurückgibt, in dem eine zufällige Verzögerung von 1 bis 10 Sekunden eingestellt ist. Das Promise soll diese Verzögerung als Ergebnis zurückgeben. Füllen Sie mit einer Schleife und Ihrer Funktion ein Array mit 10 Promises.

Задание 2

Verwenden Sie das Promise-Array aus der vorherigen Aufgabe und sorgen Sie dafür, dass das Ergebnis des ersten erfüllten Promises in der Konsole ausgegeben wird.

Задание 3

Verwenden Sie das Promise-Array aus der vorherigen Aufgabe und sorgen Sie dafür, dass die Summe der Ergebnisse aller Promises in der Konsole ausgegeben wird.