Εργασία με πίνακες promises στο JavaScript
Τώρα θα αναλύσουμε δύο χρήσιμες μεθόδους,
που επιτρέπουν την εργασία με πίνακες promises.
Η μέθοδος Promise.all επιτρέπει την εκτέλεση
κώδικα μετά το τέλος όλων των promises, που μεταβιβάστηκαν
σε αυτήν με τη μορφή πίνακα, ενώ η μέθοδος Promise.race
περιμένει τη φόρτωση του πρώτου promise από τον πίνακα,
απορρίπτοντας τα υπόλοιπα.
Και οι δύο μέθοδοι επιστρέφουν ως αποτέλεσμά τους ένα νέο
promise. Για τη μέθοδο Promise.all το αποτέλεσμα
αυτού του promise θα είναι ένας πίνακας με τα αποτελέσματα όλων
των promises που μεταβιβάστηκαν (η σειρά των αποτελεσμάτων
αντιστοιχεί στη σειρά των promises στον πίνακα),
ενώ για το Promise.race - το αποτέλεσμα του πρώτου
promise που εκτελέστηκε.
Ας δούμε στην πράξη. Ας υποθέσουμε ότι έχουμε έναν πίνακα promises:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Ας χρησιμοποιήσουμε το Promise.all για να περιμένουμε
το τέλος της φόρτωσης όλων των promises από τον
πίνακά μας:
Promise.all(promises).then(function(res) {
console.log(res); // θα εμφανίσει [1, 2, 3] - τα αποτελέσματα όλων των promises
});
Και τώρα ας χρησιμοποιήσουμε το Promise.race για να περιμένουμε
το τέλος της φόρτωσης του πρώτου από τα promises:
Promise.race(promises).then(function(res) {
console.log(res); // θα εμφανίσει 1 - το αποτέλεσμα του πρώτου promise που εκτελέστηκε
});
Εάν τουλάχιστον ένα από τα promises στον πίνακα
απορριφθεί, τότε το promise με το αποτέλεσμα αμέσως
θα μεταβεί στην κατάσταση rejected. Επομένως
η εξαίρεση που προκύπτει μπορεί να πιαστεί με τον συνηθισμένο,
ήδη μελετημένο από εσάς τρόπο, για παράδειγμα, μέσω
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Φτιάξτε μια συνάρτηση, που επιστρέφει ένα promise, μέσα
στο οποία ορίζεται μια τυχαία καθυστέρηση από
1 έως 10 δευτερόλεπτα. Ας επιστρέφει ως
αποτέλεσμά της το promise αυτή την καθυστέρηση.
Με τη βοήθεια βρόχου και της συνάρτησής σας συμπληρώστε
τον πίνακα 10 promises.
Χρησιμοποιώντας τον πίνακα promises από την προηγούμενη άσκηση φροντίστε ώστε στην κονσόλα να εμφανιστεί το αποτέλεσμα του πρώτου promise που εκτελέστηκε.
Χρησιμοποιώντας τον πίνακα promises από την προηγούμενη άσκηση φροντίστε ώστε στην κονσόλα να εμφανιστεί το άθροισμα αποτελεσμάτων όλων των promises.