JS-0602 - JavaScript Completo ES6 - Promises

JS-0602 - JavaScript Completo ES6 - Promises
Publicado em 25/02/24 16:02
Visualizações: 154

Resposta para o agora, para o futuro ou para o nunca!

As Promisessão funções construtoras de "promessas". Como toda promessa humana, ela é uma função que pode ser cumprida... ou melhor, resolvida, ou não! São utilizadas em operações assíncronas com callbacksadicionados a si que são executados de acordo com a sua resolução.

Uma Promise funciona como um proxy para um valor que pode ainda estar indefinido no momento de criação da promessa, permitindo a associação de métodos de tratamento para eventos assíncronos diante de sucesso ou falha do callback. Assim, quando associada a métodos assíncronos, ao invés destes aguardarem o momento de execução após a sua resolução, retornam a promessa, permitindo que se comportem como métodos síncronos.

A Promise estará sempre em um dos seguintes estados: 

  • pending (pendente): estado inicial, em que a promessa não foi realizada nem rejeitada;
  • fulfilled (realizada): estado final, em que ocorreu o sucesso na operação; e
  • rejected (rejeitado): estado final, em que ocorreu a falha na operação.

Desta forma, existem dois resultados possíveis de uma promessa: realizada com um valor de retorno ou rejeitada por um motivo (erro). Quando um desses estados ocorre, o método then do objeto Promise é chamado, e ele chama o método de tratamento associado ao estado (rejected ou resolved). Isto permite que não haja uma condição de competição entre uma operação assíncrona e seus manipuladores que estão associados.

As Promises seguem o formato abaixo:

  1. Utiliza-se o operador new (são funções construtoras);
  2. Dentro da Promisse é passada uma função de callback com dois parâmetros especiais, que são as funções que serão realizadas por ocorrência do sucesso ou falha da promessa. O segundo parâmetro (rejected) pode ser omitido. Qualquer nome pode ser utilizado; e
  3. Uma condição definirá qual o tratamento será realizada.

JS-0602 - JavaScript Completo ES6 - Promises

Quando a condição de resolução da promise não é atingida, será ativada a função rejected. Ex:

JS-0602 - JavaScript Completo ES6 - Promises

O poder das Promises

O que torna as Promisses especiais são os métodos de seu prototype, then e cath, que retornam as promises e permitem a realização de encadeamento, tendo como parâmetro o retorno do seu passo anterior, em uma operação chamada composição.

Método then:

Método chave das Promises. O callback deste método é ativado somente quando a promise é resolvida. O argumento do callback é o valor passado na função resolved.

JS-0602 - JavaScript Completo ES6 - Promises

A utilização de Arrow Function pode simplificar o código:

JS-0602 - JavaScript Completo ES6 - Promises

A utilização de Promises só tem sentido em códigos com eventos assíncronos. Este é o seu propósito: garantir tratamento para retornos de eventos assíncronos. No exemplo abaixo, o estado da Promise fica como "pending", até que transcorra os cinco segundos em relação ao seu contexto. Depois da sua resolução, o retorno ocorre como esperado.

JS-0602 - JavaScript Completo ES6 - Promises

O encadeamento de métodos then é possível graças aoretorno da Promise, que é outra Promisee, como dito anteriormente, o primeiro argumento de cada then, será o valor do retorno da promise anterior.

JS-0602 - JavaScript Completo ES6 - Promises

No exemplo abaixo, será aplicado alterações em um objeto vazio a cada resolução de uma promessa:

JS-0602 - JavaScript Completo ES6 - Promises

Método catch:

Este método adiciona um callback à promise que será ativado quando ocorrer uma falha (rejected).

JS-0602 - JavaScript Completo ES6 - Promises

Podemos passar a função que será ativada caso a promise seja rejeitada diretamente em um método then como um segundo argumento:

JS-0602 - JavaScript Completo ES6 - Promises

Outros métodos

Método finally:

O finally executa uma função anônima definida assim que a promessa for finalizada, independentemente do resultado (resolução ou falha):

JS-0602 - JavaScript Completo ES6 - Promises

Método all de Promise:

Este método retorna uma nova promise assim que todas as promises dentro dela forem resolvidas ou ao menos uma rejeitada. O retorno é um array com as respostas de cada promise:

JS-0602 - JavaScript Completo ES6 - Promises

Método race de Promise:

Retornará uma nova promise assim que a primeira promise for resolvida ou rejeitada. Essa nova promise terá a resposta da primeira.

JS-0602 - JavaScript Completo ES6 - Promises

Vantagens:

A utilização de Promises tem as seguintes vantagens:

  • Garantias: callbacks nunca serão chamados antes da conclusão da execução de um evento. Callbacks encadeados poderão ser chamados de acordo com o resultado da promise anterior;
  • Encadeamento: possibilidade de execução de mais de uma operação assíncrona consecutiva, através de cadeias de promises; e
  • Propagação de erros: uma cadeia de promises encerra se ocorrer uma exceção, de uma forma controlada, sendo uma característica essencial para a funcionalidade de operações assíncronas.

Veja também:

Confira mais artigos relacionados

Este website utiliza cookies próprios e de terceiros a fim de personalizar o conteúdo, melhorar a experiência do usuário, fornecer funções de mídias sociais e analisar o tráfego. Para continuar navegando você deve concordar com nossa Política de Privacidade

Aceito Não aceito