Ποιους τύπους Promise γνωρίζεις;
sobes.tech AI
Απάντηση από AI
Οι βασικοί τύποι υποσχέσεων στο Node.js:
-
Βασική Υπόσχεση: Ένας κοντέινερ για μελλοντικές τιμές ή σφάλματα. Έχει τρεις καταστάσεις:
pending(σε αναμονή),fulfilled(επιτυχής ολοκλήρωση),rejected(απορρίφθηκε με σφάλμα). Δημιουργείται με τον κατασκευαστήnew Promise().// Δημιουργία βασικής υπόσχεσης const myPromise = new Promise((resolve, reject) => { // Ασύγχρονη λειτουργία setTimeout(() => { const success = true; if (success) { resolve("Η λειτουργία ολοκληρώθηκε με επιτυχία"); } else { reject("Παρουσιάστηκε σφάλμα"); } }, 1000); }); -
Promise.resolve(): Δημιουργεί μια υπόσχεση που μεταβαίνει αμέσως στην κατάσταση
fulfilledμε μια δοθείσα τιμή.// Δημιουργία επιλυμένης υπόσχεσης const resolvedPromise = Promise.resolve("Αυτή είναι ήδη μια ολοκληρωμένη υπόσχεση"); -
Promise.reject(): Δημιουργεί μια υπόσχεση που μεταβαίνει αμέσως στην κατάσταση
rejectedμε το λόγο σφάλματος.// Δημιουργία απορριφθείσας υπόσχεσης const rejectedPromise = Promise.reject(new Error("Αυτή είναι μια απορριφθείσα υπόσχεση")); -
Promise.all(): Δέχεται έναν πίνακα από υποσχέσεις και επιστρέφει μια νέα υπόσχεση. Αυτή η νέα υπόσχεση περνά στην κατάσταση
fulfilledόταν όλες οι υποσχέσεις στον πίνακα ολοκληρωθούν επιτυχώς. Η τιμή θα είναι ένας πίνακας αποτελεσμάτων με την ίδια σειρά με τις εισερχόμενες υποσχέσεις. Αν οποιαδήποτε από τις υποσχέσεις απορριφθεί, τοPromise.all()απορρίπτεται αμέσως με το λόγο της πρώτης απορριφθείσας υπόσχεσης.// Χρήση του Promise.all() const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = new Promise((resolve, reject) => setTimeout(() => resolve(3), 100)); Promise.all([promise1, promise2, promise3]) .then((values) => { // values θα είναι [1, 2, 3] }) .catch((error) => { // Διαχείριση σφαλμάτων }); -
Promise.allSettled(): Δέχεται έναν πίνακα από υποσχέσεις και επιστρέφει μια νέα υπόσχεση. Αυτή η νέα υπόσχεση περνά στην κατάσταση
fulfilledόταν όλες οι υποσχέσεις ολοκληρωθούν είτε με επιτυχία (fulfilled) είτε με απόρριψη (rejected). Η τιμή θα είναι ένας πίνακας αντικειμένων που περιγράφουν το αποτέλεσμα κάθε υπόσχεσης (κατάσταση και τιμή/λόγος). Σε αντίθεση με τοPromise.all(), δεν απορρίπτεται αμέσως.// Χρήση του Promise.allSettled() const promiseA = Promise.resolve("επιτυχία"); const promiseB = Promise.reject("σφάλμα"); Promise.allSettled([promiseA, promiseB]) .then((results) => { // results θα είναι ένας πίνακας αντικειμένων: // [{status: 'fulfilled', value: 'επιτυχία'}, {status: 'rejected', reason: 'σφάλμα'}] }); -
Promise.race(): Δέχεται έναν πίνακα από υποσχέσεις και επιστρέφει μια νέα υπόσχεση. Αυτή η νέα υπόσχεση περνά στην κατάσταση
fulfilledήrejectedμε το αποτέλεσμα/λόγο της πρώτης υπόσχεσης που ολοκληρώθηκε με επιτυχία ή απορρίφθηκε.// Χρήση του Promise.race() const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Είμαι γρήγορος!"), 50)); const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Είμαι αργός..."), 500)); Promise.race([promiseFast, promiseSlow]) .then((value) => { // value θα είναι "Είμαι γρήγορος!" }); -
Promise.any(): Δέχεται έναν πίνακα από υποσχέσεις και επιστρέφει μια νέα υπόσχεση. Αυτή η υπόσχεση περνά στην κατάσταση
fulfilledμε την τιμή της πρώτης υπόσχεσης που ολοκληρώθηκε με επιτυχία. Αν όλες οι υποσχέσεις απορριφθούν, τοPromise.any()επιστρέφει σφάλμαAggregateErrorπου περιέχει τους λόγους όλων των απορριφθέντων υποσχέσεων. Διαθέσιμο από το Node.js 12.// Χρήση του Promise.any() const promiseFail1 = Promise.reject("Σφάλμα 1"); const promiseSuccess = Promise.resolve("Επιτυχία!"); const promiseFail2 = Promise.reject("Σφάλμα 2"); Promise.any([promiseFail1, promiseSuccess, promiseFail2]) .then((value) => { // value θα είναι "Επιτυχία!" }) .catch((error) => { // Διαχείριση του AggregateError αν όλες οι υποσχέσεις απορριφθούν });