JavaScript Promise and Promise Chaining

Neste tutorial, você aprenderá sobre as promessas JavaScript e o encadeamento de promessas com a ajuda de exemplos.

Em JavaScript, uma promessa é uma boa maneira de lidar com operações assíncronas . É usado para descobrir se a operação assíncrona foi concluída com sucesso ou não.

Uma promessa pode ter um de três estados.

  • Pendente
  • Realizada
  • Rejeitado

Uma promessa começa em um estado pendente. Isso significa que o processo não está completo. Se a operação for bem-sucedida, o processo termina em um estado concluído. E, se ocorrer um erro, o processo termina em um estado rejeitado.

Por exemplo, quando você solicita dados do servidor usando uma promessa, ele fica em um estado pendente. Quando os dados chegam com sucesso, eles estarão em um estado preenchido. Se ocorrer um erro, ele estará em um estado rejeitado.

Crie uma promessa

Para criar um objeto de promessa, usamos o Promise()construtor.

 let promise = new Promise(function(resolve, reject)( //do something ));

O Promise()construtor recebe uma função como argumento. A função também aceita duas funções resolve()e reject().

Se a promessa for retornada com sucesso, a resolve()função será chamada. E, se ocorrer um erro, a reject()função é chamada.

Vamos supor que o programa abaixo seja um programa assíncrono. Então, o programa pode ser tratado por meio de uma promessa.

Exemplo 1: programa com uma promessa

 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);

Resultado

 Promessa (: "Há um valor de contagem.")

No programa acima, Promiseé criado um objeto que assume duas funções: resolve()e reject(). resolve()é usado se o processo for bem-sucedido e reject()quando ocorre um erro na promessa.

A promessa é resolvida se o valor de contagem for verdadeiro.

Trabalho de promessa de JavaScript

JavaScript Promise Chaining

As promessas são úteis quando você precisa lidar com mais de uma tarefa assíncrona, uma após a outra. Para isso, usamos o encadeamento de promessa.

Você pode executar uma operação depois de uma promessa é resolvido através de métodos then(), catch()e finally().

Método JavaScript then ()

O then()método é usado com o retorno de chamada quando a promessa é cumprida ou resolvida com sucesso.

A sintaxe do then()método é:

 promiseObject.then(onFulfilled, onRejected);

Exemplo 2: encadeando a promessa com então ()

 // 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.'); ), );

Resultado

 Promessa resolvida Você pode chamar várias funções dessa maneira.

No programa acima, o then()método é usado para encadear as funções à promessa. O then()método é chamado quando a promessa é resolvida com sucesso.

Você pode encadear vários then()métodos com a promessa.

Método catch () de JavaScript

O catch()método é usado com o retorno de chamada quando a promessa é rejeitada ou se ocorrer um erro. Por exemplo,

 // 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); ) );

Resultado

 Promessa rejeitada

No programa acima, a promessa é rejeitada. E o catch()método é usado com a promessa de tratar o erro.

Trabalho de encadeamento de promessa JavaScript

JavaScript Promise Versus Callback

As promessas são semelhantes às funções de retorno de chamada no sentido de que ambas podem ser usadas para lidar com tarefas assíncronas.

As funções de retorno de chamada JavaScript também podem ser usadas para realizar tarefas síncronas.

Suas diferenças podem ser resumidas nos seguintes pontos:

Promessa de JavaScript

  1. A sintaxe é amigável e fácil de ler.
  2. O tratamento de erros é mais fácil de gerenciar.
  3. Exemplo:
     api (). then (function (result) (return api2 ();)). then (function (result2) (return api3 ();)). then (function (result3) (// do work)). catch ( função (erro) (// trata de qualquer erro que possa ocorrer antes deste ponto));

Retorno de chamada de JavaScript

  1. A sintaxe é difícil de entender.
  2. O tratamento de erros pode ser difícil de gerenciar.
  3. Exemplo:
     api (function (result) (api2 (function (result2) (api3 (function (result3)) (// funciona se (erro) (// faz algo) else (// faz algo)));));)) ;

Método JavaScript finalmente ()

You can also use the finally() method with promises. The finally() method gets executed when the promise is either resolved successfully or rejected. For example,

 // 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.'); ) );

Output

 This code is executed.

JavaScript Promise Methods

There are various methods available to the Promise object.

Method Description
all(iterable) Waits for all promises to be resolved or any one to be rejected
allSettled(iterable) Waits until all promises are either resolved or rejected
any(iterable) Returns the promise value as soon as any one of the promises is fulfilled
race(iterable) Wait until any of the promises is resolved or rejected
reject(reason) Returns a new Promise object that is rejected for the given reason
resolve(value) Returns a new Promise object that is resolved with the given value
catch() Appends the rejection handler callback
then() Appends the resolved handler callback
finally() Appends a handler to the promise

To learn more about promises in detail, visit JavaScript Promises.

Artigos interessantes...