--- 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.