⊗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ščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј