⊗jsSpPrmFC 171 of 294 menu

Įvykdyto pažado sukūrimas JavaScript

Kartais jums gali tekti sukurti jau įvykdytą pažadą. Tam yra du metodai: metodas Promise.resolve sukuria sėkmingai įvykdytą pažadą, Promise.reject sukuria atmestą pažadą. Šie metodai parametru gauna tai, kas atitinkamai taps pažado rezultatu arba klaida.

Kada mums gali prireikti jau įvykdytą pažadą? Pažiūrėkime pavyzdžiu. Tarkime, kad turime tam tikrą funkciją, kuri parametru priima skaičių, kažką su juo asinchroniškai atlieka ir grąžina pažadą su rezultatu:

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

Mes naudosime savo funkciją taip:

func(5).then(function(res) { console.log(res); // išves 25 });

Tarkime, kad dabar nusprendėme, kad savo asinchroninę operaciją atliksime tik jei perduotas skaičius yra didesnis už nulį. Priešingu atveju funkcijos rezultatas turėtų būti nulis:

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

Tačiau dabar pasirodo, kad funkcija grąžina arba pažadą, arba skaičių. Dėl to mes daugiau nebegalime pritaikyti metodo then prie funkcijos rezultato, nes jei funkcija grąžins skaičių, gausime klaidą:

func(0).then(function(res) { // klaida, taikome metodą then nuliui });

Išspręsti problemą mums padės Promise.resolve:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // grąžiname pažadą, o ne skaičių } }

Tarkime, kad dabar nusprendėme, kad už perduotą nulį turime grąžinti nulį, o už skaičius mažesnius už nulį - išimtį. Tam mums padės metodas 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'); // grąžinsime atmestą pažadą } }
Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti