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:
let 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:
Promise.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:
Promise.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:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
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.
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.
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.