JavaScript Promise och Promise Chetting

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 Promiseskapas 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.

Arbeta med JavaScript-löfte

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.

Arbeta med JavaScript-lovande kedjning

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

  1. Syntaxen är användarvänlig och lätt att läsa.
  2. Felhantering är lättare att hantera.
  3. 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

  1. Syntaxen är svår att förstå.
  2. Felhantering kan vara svårt att hantera.
  3. 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.

Intressanta artiklar...