⊗jsSpPrmSS 174 of 294 menu

Promises σε Συγχρονικό Στυλ στο JavaScript

Για την επίλυση του προβλήματος του promise hell επινοήθηκε μια ειδική σύνταξη για τα promises, που επιτρέπει τη γραφή ασύγχρονου κώδικα πολύ πιο εύκολα - σε συγχρονικό στυλ.

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

function func() { getSmth(2).then(res => { console.log(res); // θα εμφανίσει 4 }); } func();

Αν η συνάρτησή μας getSmth ήταν σύγχρονη, τότε τον κώδικα της συνάρτησης func θα μπορούσαμε να τον ξαναγράψουμε ως εξής:

function func() { let res = getSmth(2); console.log(res); // θα εμφανίσει 4 }

Η συνάρτηση getSmth, ωστόσο, είναι ασύγχρονη, επομένως ο παραπάνω κώδικας δεν θα λειτουργήσει. Αλλά, χρησιμοποιώντας το συγχρονικό στυλ των promises, μπορούμε να πετύχουμε κάτι παρόμοιο. Ας το κάνουμε.

Αρχικά, πρέπει να δηλώσουμε τη συνάρτησή μας func ως ασύγχρονη χρησιμοποιώντας την ειδική εντολή async:

async function func() { }

Μετά από αυτό, θα μπορούμε μέσα στη συνάρτηση func να χρησιμοποιήσουμε την ειδική εντολή await. Αυτή η εντολή, όταν γράφεται πριν από ένα promise, θα αναγκάσει το JavaScript να περιμένει μέχρι το promise να εκπληρωθεί. Μετά από αυτό, η εντολή θα επιστρέψει το αποτέλεσμα του promise, και η εκτέλεση του κώδικα θα συνεχιστεί.

Στην περίπτωσή μας, πρέπει να γράψουμε await πριν από την κλήση της getSmth. Εφόσον το αποτέλεσμα της κλήσης αυτής της συνάρτησης θα είναι ένα promise, η περαιτέρω εκτέλεση του κώδικα θα συνεχιστεί μόνο μετά την εκπλήρωση αυτού του promise. Και, το αποτέλεσμα του promise μπορεί να αποθηκευτεί σε μια μεταβλητή. Ας κάνουμε όπως περιγράφηκε:

async function func() { let res = await getSmth(2); console.log(res); // θα εμφανίσει 4 } func();

Ας καλέσουμε την getSmth αρκετές φορές:

async function func() { let res1 = await getSmth(2); let res2 = await getSmth(3); console.log(res1 + res2); // θα εμφανίσει 13 } func();

Και τώρα ας καλούμε την getSmth σε έναν βρόχο:

async function func() { let arr = [1, 2, 3, 4, 5]; let sum = 0; for (let elem of arr) { sum += await getSmth(elem); } console.log(sum); } func();

Ξαναγράψτε τον ακόλουθο κώδικα χρησιμοποιώντας τη συγχρονική σύνταξη:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();
Ελληνικά
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 για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη