⊗jsSpPrmFC 171 of 294 menu

Oprettelse af opfyldte promises i JavaScript

Sommetider kan du have brug for at oprette et allerede opfyldt promise. Til dette findes der to metoder: metoden Promise.resolve opretter et succesfuldt opfyldt promise, Promise.reject opretter et afvist promise. Disse metoder modtager som parameter det, der bliver resultatet eller fejlen på promise henholdsvis.

Hvornår kan vi have brug for et allerede opfyldt promise? Lad os se på et eksempel. Antag at vi har en funktion, der modtager et tal som parameter, gør noget asynkront med det og returnerer et promise med resultatet:

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

Vi vil bruge vores funktion på følgende måde:

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

Antag nu at vi besluttede, at vi kun vil udføre vores asynkrone operation, hvis der overføres et tal større end nul. I modsat fald skal funktionens resultat være nul:

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

Men nu resulterer det i, at funktionen returnerer enten et promise eller et tal. På grund af dette kan vi ikke længere anvende metoden then på resultatet af funktionen, fordi i tilfælde af at funktionen returnerer et tal, får vi en fejl:

func(0).then(function(res) { // fejl, anvender then-metoden på nul });

Promise.resolve kan hjælpe os med at løse problemet:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // returnerer et promise, ikke et tal } }

Antag nu at vi besluttede, at for det overførte nul skal vi returnere nul, og for tal mindre end nul - en undtagelse. Metoden Promise.reject kan hjælpe os med dette:

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'); // returner et afvist promise } }
Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis