I den här handledningen lär du dig om JavaScript-löften och löftekedjning med hjälp av exempel.
I JavaScript är ett löfte ett bra sätt att hantera asynkrona operationer. Den används för att ta reda på om den asynkrona åtgärden har slutförts eller inte.
Ett löfte kan ha en av tre stater.
- I väntan på
- Uppfyllt
- avvisade
Ett löfte börjar i pågående tillstånd. Det betyder att processen inte är klar. Om operationen lyckas slutar processen i ett uppfyllt tillstånd. Och om ett fel inträffar slutar processen i ett avvisat tillstånd.
Till exempel när du begär data från servern med hjälp av ett löfte kommer det att vara i väntande tillstånd. När data kommer framgångsrikt kommer de att vara i uppfyllt tillstånd. Om ett fel inträffar kommer det att vara i avvisat tillstånd.
Skapa ett löfte
För att skapa ett löfteobjekt använder vi Promise()
konstruktören.
let promise = new Promise(function(resolve, reject)( //do something ));
Den Promise()
konstruktören tar en funktion som ett argument. Funktionen accepterar också två funktioner resolve()
och reject()
.
Om löftet återkommer, resolve()
kallas funktionen. Och om ett fel inträffar reject()
kallas funktionen.
Låt oss anta att programmet nedan är ett asynkront program. Då kan programmet hanteras med ett löfte.
Exempel 1: Program med ett löfte
const count = true; let countValue = new Promise(function (resolve, reject) ( if (count) ( resolve("There is a count value."); ) else ( reject("There is no count value"); ) )); console.log(countValue);
Produktion
Promise (: "Det finns ett räknevärde.")
I ovanstående program Promise
skapas ett objekt som tar två funktioner: resolve()
och reject()
. resolve()
används om processen är framgångsrik och reject()
används när ett fel inträffar i löftet.
Löftet löses om värdet på räkningen är sant.
![](https://cdn.wiki-base.com/5343878/javascript_promise_and_promise_chaining.png.webp)
JavaScript lovar kedjning
Löften är användbara när du måste hantera mer än en asynkron uppgift, en efter en. För det använder vi löftetkedjning.
Du kan utföra en operation efter ett löfte är löst med hjälp av metoder then()
, catch()
och finally()
.
JavaScript då () metod
Den then()
metod som används med återuppringning när löftet framgångsrikt uppfyllt eller lösas.
Syntaxen för then()
metoden är:
promiseObject.then(onFulfilled, onRejected);
Exempel 2: Kedja löftet med sedan ()
// returns a promise let countValue = new Promise(function (resolve, reject) ( resolve('Promise resolved'); )); // executes when promise is resolved successfully countValue.then( function successValue(result) ( console.log(result); ), ) .then( function successValue1() ( console.log('You can call multiple functions this way.'); ), );
Produktion
Löftet löst Du kan ringa flera funktioner på detta sätt.
I ovanstående program används then()
metoden för att kedja funktionerna till löftet. Den then()
metoden kallas när löftet är löst framgångsrikt.
Du kan kedja flera then()
metoder med löftet.
JavaScript catch () -metod
Den catch()
metod används med återuppringning när löftet avvisas eller om ett fel uppstår. Till exempel,
// returns a promise let countValue = new Promise(function (resolve, reject) ( reject('Promise rejected'); )); // executes when promise is resolved successfully countValue.then( function successValue(result) ( console.log(result); ), ) // executes if there is an error .catch( function errorValue(result) ( console.log(result); ) );
Produktion
Löftet avvisas
I ovanstående program avvisas löftet. Och catch()
metoden används med ett löfte om att hantera felet.
![](https://cdn.wiki-base.com/5343878/javascript_promise_and_promise_chaining_2.png.webp)
JavaScript Promise Versus Callback
Löften liknar återuppringningsfunktioner i en mening att de båda kan användas för att hantera asynkrona uppgifter.
JavaScript-återuppringningsfunktioner kan också användas för att utföra synkrona uppgifter.
Deras skillnader kan sammanfattas i följande punkter:
JavaScript lovar
- Syntaxen är användarvänlig och lätt att läsa.
- Felhantering är lättare att hantera.
- Exempel:
api (). sedan (funktion (resultat) (returnera api2 ();)). sedan (funktion (resultat2) (returnera api3 ();)). sedan (funktion (resultat3) (// gör arbete)). fånga ( funktion (fel) (// hanterar alla fel som kan uppstå före denna punkt));
JavaScript-återuppringning
- Syntaxen är svår att förstå.
- Felhantering kan vara svårt att hantera.
- Exempel:
api (funktion (resultat) (api2 (funktion (resultat2) (api3 (funktion (resultat3) (// fungerar om (fel) (// gör något) annat (// gör något));));)) ;
JavaScript slutligen () -metoden
Du kan också använda finally()
metoden med löften. Den finally()
metod blir verkställd när löftet antingen lösas framgångsrikt eller förkastas. Till exempel,
// returns a promise let countValue = new Promise(function (resolve, reject) ( // could be resolved or rejected resolve('Promise resolved'); )); // add other blocks of code countValue.finally( function greet() ( console.log('This code is executed.'); ) );
Produktion
Den här koden körs.
JavaScript Promise Methods
Det finns olika metoder tillgängliga för Promise-objektet.
Metod | Beskrivning |
---|---|
all(iterable) | Väntar på att alla löften ska lösas eller att något avvisas |
allSettled(iterable) | Vänta tills alla löften antingen löses eller avvisas |
any(iterable) | Returnerar löftesvärdet så snart något av löftena uppfylls |
race(iterable) | Vänta tills något av löftena har lösts eller avvisas |
reject(reason) | Returnerar ett nytt Promise-objekt som avvisas av den angivna anledningen |
resolve(value) | Returnerar ett nytt Promise-objekt som löses med det angivna värdet |
catch() | Lägger till återuppringning av avvisningshanteraren |
then() | Lägger till den återupplagda återuppringningen av föraren |
finally() | Lägger till en hanterare till löftet |
För att lära dig mer om löften i detalj, besök JavaScript Promises.