⊗jsSpPrmFC 171 of 294 menu

Skapa uppfyllda promises i JavaScript

Ibland kan du behöva skapa ett redan uppfyllt promise. För detta finns det två metoder: metoden Promise.resolve skapar ett framgångsrikt uppfyllt promise, Promise.reject skapar ett avvisat promise. Som parameter tar dessa metoder det som blir resultatet eller felet för promiset respektive.

När kan vi behöva ett redan uppfyllt promise? Låt oss titta på ett exempel. Antag att vi har en funktion som tar ett nummer som parameter, gör något med det asynkront och returnerar ett promise med resultatet:

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

Vi kommer att använda vår funktion på följande sätt:

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

Antag nu att vi bestämde oss för att vi endast ska utföra vår asynkrona operation om ett nummer större än noll skickas. Annars ska resultatet av funktionen vara noll:

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

Men nu blir det så att funktionen returnerar antingen ett promise eller ett nummer. På grund av detta kan vi inte längre tillämpa metoden then på resultatet av funktionen, eftersom vi i fallet där funktionen returnerar ett nummer kommer att få ett fel:

func(0).then(function(res) { // fel, vi tillämpar metoden then på noll });

Promise.resolve kan hjälpa oss att åtgärda problemet:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // returnerar ett promise, inte ett nummer } }

Antag nu att vi bestämde oss för att för skickad nolla ska vi returnera noll, och för nummer mindre än noll - ett undantag. Metoden Promise.reject kan hjälpa oss med detta:

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'); // returnerar ett avvisat promise } }
Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa