DEV Community

Gustavo Inocencio
Gustavo Inocencio

Posted on

Uso de Promises

Na programação assíncrona um recurso bastante utilizado é o de Promises, já que sempre queremos que nossas operações e nosso código rodem o mais rápido possível,
assim um recurso que nos permite paralelizar o máximo de ações é extremamente útil.

A estrutura de uma Promise é a seguinte:

// Criando uma promise
const p = new Promise((resolve, reject) => {
  try {
    resolve(funcaoX())
  } catch (e) {
    reject(e)
  }
})

// Executando uma promise
p
  .then((parametros) => /* sucesso */)
  .catch((erro) => /* erro */)

// Tratando erros e sucessos no then
p
  .then(resposta => { /* tratar resposta */ }, erro => { /* tratar erro */ })
Enter fullscreen mode Exit fullscreen mode

Nesse artigo citarei algumas funcionalidades de Promises quando existe a necessidade de executar mais de uma.

Promise.race: executa a mais rápida 
Nessa funcionalidade todas as promises iniciam a execução ao mesmo tempo, mas apenas a primeira a ser resolvida tem seu valor retornado.
Essa funcionalidade permite que sejam utilizados mais de uma fonte para a informação buscada e assim ter a mais rápida do momento.

Promise.all: executa todas
Nessa funcionalidade todas as promises iniciam a execução ao mesmo tempo e vão sendo resolvidas.
O problema dessa funcionalidade é que se uma das promises for rejeitada todas são rejeitadas. Essa funcionalidade pode ser usada quando existem várias consultas a APIs diferentes a serem feitas para uma mesma tela e todas as informações precisam ser mostradas.

Promise.allsettled: executa todas, mesmo que falhe e retorna a informação de cada uma se falhou ou não 

Assim como Promise.all, nessa funcionalidade todas as promises iniciam a execução ao mesmo tempo e vão sendo resolvidas.
Mas se uma das promises for rejeitada as outras ainda são resolvidas. Essa funcionalidade pode ser usada quando existem várias consultas a APIs diferentes a serem feitas para uma mesma tela, mas para componentes diferentes. Por exemplo, um dashboard. Assim, se uma das informações não for trazida, as outras ainda podem ser apresentadas.

Mais informações sobre Promises podem ser encontradas em:
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Promise

Discussion (0)