Um objeto Promise representa uma operação que produziu ou vai produzir um valor. As promessas fornecem uma maneira robusta de encapsular o resultado (possivelmente pendente) do trabalho assíncrono, mitigando o problema de retornos de chamadas aninhadas. Nesta aula, vamos tratar sobre como trabalhar usando promise e as melhores práticas utilizadas.

Estados e fluxo de controle

Promise pode estar em um dos três estados:

Pendente - A operação ainda não foi concluída e a promise está pendente de execução.

Executada - A operação foi concluída e a promise é retornada com um valor. Isso é análogo ao retorno de um valor de uma função síncrona.

Rejeitado - Ocorreu um erro durante a operação e a promise é rejeitada com um motivo. Isso é análogo a lançar um erro em uma função síncrona.

Diz-se que uma promise é resolvida quando é cumprida (executada) ou rejeitada. Uma vez que uma promise é estabelecida, ela se torna imutável. Os métodos then e catch de uma promise podem ser usados para anexar retornos de chamada que são executados quando ela é finalizada. Esses retornos de chamada são invocados com o valor de retorno e o motivo de rejeição, respectivamente. Abaixo, veja a estrutura básica de como podemos usar promise:

Fonte: Autoral

Os métodos then e catch podem ser usados para anexar retornos de chamada que foram atendidas e rejeição:

Fonte: Autoral

Vamos trazer um exemplo mais prático do que podemos fazer:

Definimos uma função que será usada no retorno da promise se ela der certo ou não.

Fonte: Autoral

Quando colocarmos o código para executar teremos o resultado que ocorreu tudo correto. Sendo assim, nosso retorno será:

Fonte: Autoral