⊗jsSpPrmFC 171 of 294 menu

Täidetud lubaduste loomine JavaScriptis

Mõnikord võib teil olla vaja luua juba täidetud lubadust. Selleks on olemas kaks meetodit: meetod Promise.resolve loob edukalt täidetud lubaduse, Promise.reject loob tagasi lükatud lubaduse. Parameetritena saavad need meetodid selle, mis saab lubaduse tulemuseks või veaks vastavalt.

Millal võib meil vaja minna juba täidetud lubadust? Vaatame näidet. Oletame, et meil on mingi funktsioon, mis parameetrina võtab arvu, teeb sellega midagi asünkroonselt ja tagastab lubaduse tulemusega:

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

Me kasutame oma funktsiooni järgneval viisil:

func(5).then(function(res) { console.log(res); // väljastab 25 });

Oletame nüüd, et otsustasime, et oma asünkroonset operatsiooni teostame ainult siis, kui on antud arv suurem kui null. Vastasel juhul peab funktsiooni tulemus olema null:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return 0; // null tulemus } }

Siiski nüüd selgub, et funktsioon tagastab kas lubaduse või arvu. Tänu sellele me enam ei saa rakendada meetodit then funktsiooni tulemusele, sest funktsiooni tagastusel arvu saame vea:

func(0).then(function(res) { // viga, rakendame meetodit then nullile });

Probleemi parandamiseks aitab meil Promise.resolve:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // tagastame lubaduse, mitte arvu } }

Oletame nüüd, et otsustasime, et edastatud nulli puhul peame tagastama nulli, aga arvude puhul väiksem kui null - erandi. Sellest aitab meil meetod 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'); // tagastame tagasi lükatud lubaduse } }
Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu