Καταστάσεις του Promise στη JavaScript
Ένα promise μπορεί να βρίσκεται σε μία από τις τρεις καταστάσεις. Κατά τη δημιουργία του, το promise βρίσκεται σε αναμονή (pending), και στη συνέχεια μπορεί να εκπληρωθεί (fulfilled), επιστρέφοντας το αποτέλεσμα που ελήφθη, ή να απορριφθεί (rejected), επιστρέφοντας τον λόγο της αποτυχίας. Μπορείτε να δείτε τη μετάβαση από τη μια κατάσταση στην άλλη, εκτελώντας τον ακόλουθο κώδικα:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false; // ορίστε είτε true, είτε false
if (!isError) {
resolve([1, 2, 3, 4, 5]);
} else {
reject('error in promise');
}
}, 3000);
});
setInterval(function() {
console.log(promise); // κάθε δευτερόλεπτο εμφανίζουμε το promise στην κονσόλα
}, 1000);
Λάβετε υπόψη ότι οι καταστάσεις fulfilled και rejected είναι αμετάβλητες: εάν ένα promise μεταβεί σε μία από αυτές τις καταστάσεις, τότε δεν μπορεί πλέον να μεταβεί στην άλλη. Ας δούμε ένα παράδειγμα. Στον ακόλουθο κώδικα, η κλήση reject θα συμβεί νωρίτερα, επομένως η κλήση resolve θα αγνοηθεί:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('error')), 1000);
setTimeout(() => resolve('ignored'), 2000);
});
Δημιουργήστε ένα promise που θα εκπληρωθεί με επιτυχία μετά από κάποιο χρονικό διάστημα. Εμφανίστε το στην κονσόλα και μελετήστε την αρχική του κατάσταση και την ολοκληρωμένη.
Δημιουργήστε ένα promise που θα απορριφθεί μετά από κάποιο χρονικό διάστημα. Εμφανίστε το στην κονσόλα και μελετήστε την αρχική του κατάσταση και την ολοκληρωμένη.