Article image
Rafael Lima
Rafael Lima02/02/2024 09:51
Compartilhe

Otimizando o Desempenho: Como Utilizar o Promie.all para Aprimorar Requisições Assíncronas em Seu Projeto React

  • #JavaScript
  • #Next.js
  • #React

Fala galera, quero compartilhar uma coisa bem legal com vocês: o Promie.all. Esse recurso possibilita a execução de várias requisições assíncronas simultaneamente.

Estou trabalhando em uma funcionalidade que requer a realização de duas requisições assíncronas, além de uma que já está em andamento. Então, decidi realizar uma comparação de desempenho para mostrar como uma simples alteração pode trazer grandes melhorias de performance para os projetos.

Antes, eu tinha o seguinte código em um useEffect, que era responsável por realizar as requisições necessárias na minha página. Normalmente, outros membros da equipe também adicionariam outras requisições a esse useEffect.

useEffect(() => {
  loadCancellations();
  MotivoCancelamentoService.getAll().then((response) => {
    setMotivosCancelamento(response.data.data.filter((row: any) => {
      if (row.flag_ativo == 1) {
        return ({
          id: row.id,
          nome: row.nome,
          flag_ativo: row.flag_ativo
        });
      }
    }))
  }).catch(error => {
    console.error(error);
  })
  ProdutoService.getAll({}).then((response) => {
    setProdutos(response);
  });
  ProdutoTipoService.getAll({}).then((response) => {
    setProdutosTipo(response);
  })
}, []);

Desse forma, eu obtive o seguinte resultado:

image

Então, decidi criar uma função única que busca os dados e executar essa função no meu useEffect. Com a refatoração, o código ficou assim:

const fetchData = async () => {
  try {
    const [produtos, produtosTipo, motivoCancelamento] = await Promise.all([
      ProdutoService.getAll({}),
      ProdutoTipoService.getAll({}),
      MotivoCancelamentoService.getAll()
    ]);


    setMotivosCancelamento(motivoCancelamento.data.data.filter((row: any) => {
      if (row.flag_ativo == 1) {
        return ({
          id: row.id,
          nome: row.nome,
          flag_ativo: row.flag_ativo
        });
      }
    }))
    setProdutos(produtos);
    setProdutosTipo(produtosTipo);
  } catch (e) {
    console.log(e)
  }
};

 useEffect(() => {
  loadCancellations();
  fetchData();
}, []);

E veja o resultado:

image

Ficou muito legal, não é mesmo? Então, fica a dica: sempre que precisar fazer uma requisição assíncrona, utilize o Promise.all, mesmo que seja apenas uma. Isso facilitará futuras implementações caso sua tela precise de mais dados.

LinkedIn: https://www.linkedin.com/in/rafael-santos-lima/

Compartilhe
Comentários (0)