cshow

Primeiro de tudo, uma promessa é um objeto. Existem 3 estados do objeto Promise como:

  • Pendente: Estado inicial, antes que a promessa seja bem-sucedida ou falhe
  • Resolvido: Promessa concluída
  • Rejeitado: Promessa falhada

Ekran Resmi 2020 06 06 12.21.27
Representação do processo de promessas

Por exemplo, quando solicitamos dados do servidor usando uma Promessa, eles estarão no modo pendente até recebermos nossos dados.

Se conseguirmos obter as informações do servidor, a Promessa será resolvida com êxito, mas se não conseguirmos obter as informações, a Promessa estará no estado rejeitado.

Ademais, se houver várias solicitações, depois que a primeira promessa for resolvida (ou rejeitada), um novo processo será iniciado, que poderá ser anexado diretamente por um método chamado encadeamento.

Se preferir, você também pode assistir a versão em vídeo abaixo:

Qual é a diferença entre retornos de chamada e promessas?

A principal diferença entre funções de retorno de chamada e promessas é que anexamos um retorno de chamada a uma promessa em vez de passá-la. Portanto, ainda usamos funções de retorno de chamada com o Promises, mas de uma maneira diferente (encadeamento).

Essa é uma das maiores vantagens do uso do Promises, mas por quê?

O que é encadeamento?

Somente funções de retorno de chamada estão sendo usadas para operações assíncronas em JavaScript por longos anos, mas em alguns casos o uso do Promises pode ser uma opção melhor.

Se houver várias operações assíncronas a serem feitas e se tentarmos usar os bons e antigos retornos de chamada para eles, nos encontraremos rapidamente em uma situação chamada Inferno de retorno de chamada:

firstRequest(function(response) {      secondRequest(response, function(nextResponse) {            thirdRequest(nextResponse, function(finalResponse) {                 console.log('Final response: ' + finalResponse);            }, failureCallback);      }, failureCallback);}, failureCallback);

No entanto, se manipularmos a mesma operação com o Promises, já que podemos anexar retornos de chamada em vez de passá-los, desta vez o mesmo código acima parecerá muito mais limpo e fácil de ler:

firstRequest()  .then(function(response) {    return secondRequest(response);}).then(function(nextResponse) {      return thirdRequest(nextResponse);}).then(function(finalResponse) {      console.log('Final response: ' + finalResponse);}).catch(failureCallback);

O código acima mostra como vários retornos de chamada podem ser encadeados um após o outro. O encadeamento é uma das melhores características do Promises.

Criando e usando uma promessa passo a passo

Primeiramente, usamos um construtor para criar um objeto Promise:

const myPromise = new Promise();

São necessários dois parâmetros, um para êxito (resolução) e outro para falha (rejeição):

const myPromise = new Promise((resolve, reject) => {      // condition});

Finalmente, haverá uma condição e, se a condição for atendida, a Promessa será resolvida, caso contrário, será rejeitada:

const myPromise = new Promise((resolve, reject) => {      let condition;          if(condition is met) {            resolve('Promise is resolved successfully.');      } else {            reject('Promise is rejected');      }});

Por isso, criamos nossa primeira promessa. Agora vamos usá-lo.

então () para promessas resolvidas:

Se você revisitar a imagem no início desta postagem, verá dois casos: um para promessas resolvidas e outro para rejeitado. Se a promessa for resolvida (caso de sucesso), algo acontecerá a seguir (depende do que fazemos com a promessa bem-sucedida).

myPromise.then();

O método then () é chamado após a promessa ser resolvida. Então podemos decidir o que fazer com a promessa resolvida.

Por exemplo, vamos registrar a mensagem no console que recebemos da Promessa:

myPromise.then((message) => {      console.log(message);});

catch () para promessas rejeitadas:

No entanto, o método then () é apenas para promessas resolvidas. E se a promessa falhar? Então, precisamos usar o método catch ().

Da mesma forma que anexamos o método then (), também podemos anexar diretamente o método catch () logo depois ():

myPromise.then((message) => {     console.log(message);}).catch((message) => {     console.log(message);});

Portanto, se a promessa for rejeitada, ela passará para o método catch () e, desta vez, veremos uma mensagem diferente no console.

Embrulhar

É assim que criamos uma promessa em JavaScript e a usamos para casos resolvidos e rejeitados. As promessas são um tópico mais amplo, há muito mais a aprender e entender como elas funcionam leva tempo.

Este post é apenas uma introdução ao Promises e espero que você o ache útil para ter uma idéia do que são as Promessas JavaScript e como usá-las.

Se você quiser saber mais sobre Desenvolvimento Web, sinta-se à vontade para visitar minha Canal do Youtube para mais.

Obrigado pela leitura!