Πριν εισαχθεί η κλάση Promise, υπήρχε μόνο ένας τρόπος να χειριστείς ασύγχρονο κώδικα: το μοτίβο callback.
Ένα callback είναι μια συνάρτηση που περνιέται ως όρισμα σε μια άλλη συνάρτηση και καλείται όταν ολοκληρωθεί κάποια ενέργεια μέσα σε αυτή την άλλη συνάρτηση. Ένα συνηθισμένο μοτίβο για αυτές τις συναρτήσεις callback είναι να δέχονται ένα "error" ως πρώτη παράμετρο (δες το παράδειγμα παρακάτω).
function callback(error, arg2, arg3) {}
Πώς σχετίζεται αυτό με τον ασύγχρονο κώδικα;
Ιστορικά, τα callbacks έχουν χρησιμοποιηθεί για να μπορούμε να κάνουμε κάποια δουλειά αφού ολοκληρωθεί μια ασύγχρονη εργασία, χωρίς να μπλοκάρουμε ολόκληρο το πρόγραμμα.
fetchProduct(productId, function (error, data) {
if (error) {
// Handle the error
} else {
// Do some work
}
});
Στο παραπάνω παράδειγμα, η συνάρτηση fetchProduct (η οποία είναι ασύγχρονη) δέχεται ένα callback ως δεύτερο όρισμα, το οποίο καθορίζει τι θα γίνει όταν ανακτηθούν τα δεδομένα του προϊόντος.
Οι δύο στόχοι αυτής της άσκησης είναι:
promisify που μετατρέπει μια συνάρτηση που χρησιμοποιεί το "μοτίβο callback" σε μια συνάρτηση που επιστρέφει ένα Promise. Δες το παρακάτω παράδειγμα.function fetchProduct(productId, function(error, data) {
if (error) {
// Handle the error
} else {
// Make something with your data
}
})
const fetchProductAsPromise = promisify(fetchProduct);
// Now you got a function `fetchProductAsPromise`
// that returns a promise
fetchProductAsPromise(productId)
.then((data) => {})
.catch((error) => {});
Promise (χωρίς να τις χρησιμοποιήσεις)all: παίρνει έναν πίνακα από Promise και επιλύεται όταν επιλυθούν όλα τους, ή απορρίπτεται όταν απορριφθεί ένα από αυτά.allSettled: παίρνει έναν πίνακα από Promise και επιλύεται όταν όλα τους είτε επιλυθούν είτε απορριφθούν.race: παίρνει έναν πίνακα από Promise και επιλύεται ή απορρίπτεται με την τιμή του πρώτου Promise που θα επιλυθεί ή θα απορριφθεί.any: παίρνει έναν πίνακα από Promise και επιλύεται όταν επιλυθεί ένα από αυτά, ή απορρίπτεται όταν απορριφθούν όλα τους.Γράψου στο Exercism για να μάθεις και να κατακτήσεις JavaScript με 37 έννοιες159 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.