⊗jsSpPrmFC 171 of 294 menu

Suoritettujen promisejen luominen JavaScriptissä

Joskus saatat tarvita jo suoritetun promisen. Tätä varten on olemassa kaksi menetelmää: menetelmä Promise.resolve luo onnistuneesti suoritetun promisen, Promise.reject luo hylätyn promisen. Näiden menetelmien parametrina on se, mikä tulee promisen tulokseksi tai virheeksi vastaavasti.

Mille tilanteelle voimme tarvita jo suoritetun promisen? Katsotaanpa esimerkkiä. Oletetaan, että meillä on jokin funktio, joka parametrina ottaa numeron, tekee sillä jotain asynkronisesti ja palauttaa promisen tuloksella:

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

Aiomme käyttää funktiotamme seuraavalla tavalla:

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

Oletetaan nyt, että päätimme suorittaa asynkronisen toimintomme vain, jos annettu numero on suurempi kuin nolla. Muussa tapauksessa funktion tulisi palauttaa nolla:

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

Kuitenkin nyt käy niin, että funktio palauttaa joko promisen tai numeron. Tämän vuoksi emme enää voi soveltaa metodia then funktion tulokseen, koska funktion palauttaessa numeron saamme virheen:

func(0).then(function(res) { // virhe, sovellamme then-metodia nollaan });

Ongelman korjaamiseen auttaa Promise.resolve:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // palautamme promisen, emme numeroa } }

Oletetaan nyt, että päätimme, että annetun nollan tulisi palauttaa nolla, ja numeroille pienempi kuin nolla - poikkeus. Tässä auttaa meitä menetelmä 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'); // palautamme hylätyn promisen } }
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää