Promises em JavaScript

mrlazarias

Murilo

Posted on August 29, 2023

Promises em JavaScript

Você aprendeu sobre promises no JavaScript? É um assunto que muita gente desiste logo de cara, mas vou tentar descomplicar ao máximo pra você.

1. Prólogo

Nunca fui de escrever muito, mas ensinando eu aprendo melhor e de quebra posso ajudar quem estiver começando, como diria o @guto citando um grande filósofo:

"Ninguém é tão grande que não possa aprender, nem tão pequeno que não possa ensinar" - Esopo.

Foi um grande desafio tentar colocar em uma explicativa tudo que eu entendo sobre Promises / Async Await, mas espero que você goste!

2. Mas que DIABOS é uma "Promise"?

O tal assunto que assusta muitos, porém nem é tão ruim. Promises são ferramentas poderosas que o Javascript possui para lidar com códigos assíncronos.

Uma Promise é um objeto usado para processamento assíncrono. Um Promise (de “promessa”) representa um valor que pode estar disponível agora, num futuro ou nunca.
Também pode ser entendido como algo de "consistência eventual". Agora vamos falar dos estados de uma promise:

3. Estados de uma Promise:

Uma promise pode ter três estados:

  • pending: estado inicial dela, ou seja, está aguardando o fim da execução do código;
  • fulfilled: quando a operação foi realizada e/ou "resolvida" com sucesso.
  • rejected: quando a operação termina com algum erro.

4. Como construir uma promise

Para construir nossas promises, podemos usar o constructor new Promise() que recebe uma função como parâmetro que recebera dois argumentos, o resolve e o reject

new Promise((resolve, reject) => {});
Enter fullscreen mode Exit fullscreen mode

[...] resolve e reject serão usados para definirmos qual o estado que promise terá quando for finalizada.

  • Quando a promise for resolvida, usamos a função resolve;
  • Quando a promise for rejeitada, usamos a função reject

4.1 Retornando valores quando a promise é resolvida

Vamos criar uma promise e usar a função setTimeout para criar um código assíncrono que demora 1000 milissegundos (1 segundo) para ser executado. Além do setTimeout, vamos criar também uma função chamada generateRandomNumber que gera um número aleatório entre 0 e 10.

//função que gera um número aleatório
const generateRandomNumber = () => Math.round(Math.random() * 10);

const oneSecond = 1000;

// promise resolvida retornando o número aleatório
const resolvedPromiseCallback = () => {
    new Promise((resolve, reject)) {
        setTimeout(() => {
            const randomNumber = generateRandomNumber();
            resolve(randomNumber);
        }, oneSecond);
    }
}
Enter fullscreen mode Exit fullscreen mode

Quando a promise resolvedPromiseCallback for chamada, ela será finalizada com o estado de resolvida, retornando o número gerado.

4.2 Retornando um erro quando a promise é rejeitada

Da mesma forma que podemos retornar um valor quando a promise for resolvida, também podemos retornar um valor quando ela for rejeitada, usando a função reject:

//função que gera um número aleatório
const generateRandomNumber = () => Math.round(Math.random() * 10);

const oneSecond = 1000;

// promise resolvida retornando o número aleatório
const resolvedPromiseCallback = () => {
    new Promise((resolve, reject)) {
        setTimeout(() => {
            const randomNumber = generateRandomNumber();
            resolve(randomNumber);
        }, oneSecond);
    }
}

// promise rejeitada retornando um objeto de erro
const rejectedPromiseCallback = () => {
    new Promise((resolve, reject)) {
        setTimeout(() => {
            const randomNumber = generateRandomNumber();
            reject(new Error(`O número ${randomNumber} é invalido.`))
        }, oneSecond);
    }
}
Enter fullscreen mode Exit fullscreen mode

5. Finalização

Esses foram meus entendimentos sobre o estudo de promise e do jeito mais didático possível que eu consegui repassar. É um tópico bem extenso, mas eu espero que vocês tenham curtido e façam um bom uso!

Não esqueçam de encher a garrafinha d'agua e até o próximo artigo!

Twitter

💖 💪 🙅 🚩
mrlazarias
Murilo

Posted on August 29, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related