⊗jsSpPrmFC 171 of 294 menu

Δημιουργία εκπληρωμένων promises στο JavaScript

Μερικές φορές μπορεί να χρειαστείτε να δημιουργήσετε μια promise που έχει ήδη εκπληρωθεί. Για αυτό υπάρχουν δύο μέθοδοι: η μέθοδος Promise.resolve δημιουργεί μια επιτυχημένα εκπληρωμένη promise, η Promise.reject δημιουργεί μια απορριφθείσα promise. Ως παράμετρο αυτές οι μέθοδοι λαμβάνουν αυτό που θα γίνει το αποτέλεσμα ή το σφάλμα της promise αντίστοιχα.

Πότε μπορεί να χρειαστεί μια ήδη εκπληρωμένη promise; Ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε κάποια συνάρτηση που παίρνει ως παράμετρο έναν αριθμό, κάνει κάτι ασύγχρονα και επιστρέφει μια promise με το αποτέλεσμα:

function func(num) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); }

Θα χρησιμοποιούμε τη συνάρτησή μας ως εξής:

func(5).then(function(res) { console.log(res); // θα εκτυπώσει 25 });

Ας υποθέσουμε τώρα ότι αποφασίσαμε ότι την ασύγχρονη διαδικασία θα την εκτελούμε μόνο εάν περαστεί αριθμός μεγαλύτερος του μηδενός. Σε αντίθετη περίπτωση το αποτέλεσμα της συνάρτησης πρέπει να είναι μηδέν:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return 0; // μηδενικό αποτέλεσμα } }

Ωστόσο, τώρα συμβαίνει ότι η συνάρτηση επιστρέφει είτε promise, είτε αριθμό. Εξαιτίας αυτού, δεν μπορούμε πλέον να εφαρμόσουμε τη μέθοδο then στο αποτέλεσμα της συνάρτησης, αφού στην περίπτωση που η συνάρτηση επιστρέψει αριθμό θα πάρουμε σφάλμα:

func(0).then(function(res) { // σφάλμα, εφαρμόζουμε τη μέθοδο then στο μηδέν });

Για να διορθώσουμε το πρόβλημα μας βοηθάει η Promise.resolve:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // επιστρέφουμε promise, όχι αριθμό } }

Ας υποθέσουμε τώρα ότι αποφασίσαμε ότι για το μηδέν που περάστηκε πρέπει να επιστρέψουμε μηδέν, ενώ για αριθμούς μικρότερους του μηδενός - μια εξαίρεση. Σε αυτό μας βοηθάει η μέθοδος Promise.reject:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else if (num === 0) { return Promise.resolve(0); } else { return Promise.reject('incorrect number'); // επιστρέφουμε μια απορριφθείσα promise } }
Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη