⊗jsSpPrmFC 171 of 294 menu

Стварэнне спрацаваных промісаў у JavaScript

Часам вам можа спатрэбіцца стварыць ужо выкананы проміс. Для гэтага існуюць два метады: метад Promise.resolve стварае выкананы паспяхова проміс, Promise.reject стварае адхілены проміс. Параметрам гэтыя метады атрымліваюць тое, што стане вынікам ці памылкай проміса адпаведна.

Калі нам можа спатрэбіцца ўжо выкананы проміс? Давайце паглядзім на прыкладзе. Хай у нас ёсць нейкая функцыя, якая параметрам прымае лік, што-то з ім робіць асінхронна і вяртае проміс з вынікам:

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; // нулявы вынік } }

Аднак, цяпер атрымліваецца, што функцыя вяртае ці проміс, ці лік. З-за гэтага мы больш не можам ужыць метад 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.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'); // вернем адхілены проміс } }
Беларуская
AfrikaansAzərbaycanБългарскиবাংলাČeštinaDanskDeutschΕλληνικάEnglishEspañ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 для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць