⊗jsSpPrmFC 171 of 294 menu

Kreiranje ispunjenih promisa u JavaScript-u

Ponekad vam može zatrebati da kreirate već ispunjen promise. Za to postoje dve metode: metoda Promise.resolve kreira uspešno ispunjen promise, Promise.reject kreira odbijeni promise. Kao parametar ove metode primaju ono što će postati rezultat ili greška promise-a respektivno.

Kada nam može zatrebati već ispunjen promise? Pogledajmo na primeru. Neka imamo određenu funkciju koja parametrom prima broj, nešto asinhrono radi s njim i vraća promise sa rezultatom:

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

Koristićemo našu funkciju na sledeći način:

func(5).then(function(res) { console.log(res); // ispisaće 25 });

Neka smo sada odlučili da ćemo našu asinhronu operaciju izvršavati samo ako je prosledjen broj veći od nule. U suprotnom rezultat funkcije treba da bude nula:

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

Međutim, sada se ispostavlja da funkcija vraća ili promise, ili broj. Zbog toga više ne možemo primeniti metodu then na rezultat funkcije, jer u slučaju da funkcija vrati broj dobićemo grešku:

func(0).then(function(res) { // greška, primenjujemo metodu then na nulu });

Problem ćemo rešiti uz pomoć Promise.resolve:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // vraćamo promise, a ne broj } }

Neka smo sada odlučili da za prosleđenu nulu treba da vratimo nulu, a za brojeve manje od nule - izuzetak. U tome će nam pomoći metoda 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'); // vratićemo odbijeni promise } }
Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij