⊗jsSpPrmFC 171 of 294 menu

Tworzenie spełnionych promisów w JavaScript

Czasami może zaistnieć potrzeba utworzenia już wykonanego promisa. Służą do tego dwie metody: metoda Promise.resolve tworzy pomyślnie spełniony promis, Promise.reject tworzy odrzucony promis. Parametrem te metody otrzymują to, co stanie się wynikiem lub błędem promisa odpowiednio.

Kiedy może nam być potrzebny już wykonany promis? Spójrzmy na przykład. Załóżmy że mamy pewną funkcję, która parametrem przyjmuje liczbę, robi z nią coś asynchronicznie i zwraca promis z wynikiem:

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

Będziemy używać naszej funkcji w następujący sposób:

func(5).then(function(res) { console.log(res); // wypisze 25 });

Załóżmy teraz, że zdecydowaliśmy, że naszą asynchroniczną operację będziemy wykonywać tylko jeśli przekazano liczbę większą od zera. W przeciwnym razie wynikiem funkcji powinno być zero:

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

Jednakże teraz wychodzi na to, że funkcja zwraca albo promis, albo liczbę. Z tego powodu nie możemy dłużej zastosować metody then do wyniku funkcji, ponieważ w przypadku zwrócenia przez funkcję liczby otrzymamy błąd:

func(0).then(function(res) { // błąd, stosujemy metodę then do zera });

Naprawić problem pomoże nam Promise.resolve:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // zwracamy promis, a nie liczbę } }

Załóżmy teraz, że zdecydowaliśmy, że dla przekazanego zera powinniśmy zwrócić zero, a dla liczb mniejszych od zera - wyjątek. W tym pomoże nam 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'); // zwrócimy odrzucony promis } }
Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć