---
# System prepended metadata

title: Promise
tags: [' promises', fetch]

---

---
tags: fetch, promises
---

# Promise

![Pinky Promise](https://i.imgur.com/vy4fdMb.png)


## Conceito

***O conceito de promise é igual o conceito de uma promessa na vida real.***

Alguém se compromete a fazer alguma coisa e, com isso, temos 2 alternativas sobre essa promessa: ou ela vai ser cumprida e realmente vão fazer o que prometeram, ou vai dar tudo errado e a promessa não vai poder ser concluída.

## O objeto Promise((resolve, reject) => {})

Dentro do JavaScript, temos um objeto construtor chamado Promise que recebe como parâmetro uma função de callback que, por sua vez, recebe dois parâmetros, o resolve e o reject.

Esse objeto tem a função de checar alguns valores e voltar o resolve se for true, ou o reject se for false.

Para retornarmos com ambos esses métodos, não utilizamos o return que normalmente utilizamos em nossas funções, em vez disso, utilizamos os próprios métodos resolve e reject invocando-os e passando o que queremos retornar.

### Uso

Quando atribuimos essa promise à uma variável, podemos chamar ela no nosso código simplesmente escrevendo o nome da variável a qual ela foi atribuida e usarmos o .then e o .catch.

- **.then((message) => {})**
  Neste método recebemos o que foi setado para retornar da nossa promise se ela for bem sucedida. O argumento **message** é o que nos retorna isso. Nesse caso, teremos o retorno do **resolve**.
- **.catch((message) => {})**
  Neste método recebemos o que foi setado para retornar da nossa promise se ela for mal sucedida. O argumento **message** é o que nos retorna isso. Neste caso, teremos o retorno do **reject**.
  
Podemos usar esse construtor para substituirmos funções que recebem funções de callback, assim simplificando o trabalho imenso que isso pode dar.

Quando precisamos fazer algo que depende de mais de uma promise, podemos usar o **Promise.all([***array***])**, passando todas nossas promises nesse array de argumento. Assim ele checa o resolve de todas essas promises e, se tudo estiver certo, conseguimos então usar o **.then** e o **.catch**. Esse método retorna uma array com todos os retornos de nossas promises que foram passadas, se elas forem bem sucedidas ou não.

Temos também o **Promise.race([***array***])** que, por sua vez, assim que uma das promises é concluída ele retorna apenas uma message, que é a da promise que retornou primeiro, no caso.