image

Bootcamps ilimitados + curso de inglês para sempre

80
%OFF
Article image
Rafael Lima
Rafael Lima02/02/2024 09:51
Compartilhe
WEX - End to End EngineeringRecomendados para vocêWEX - End to End Engineering

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
Recomendados para você
GFT Start #6 - Lógica de Programação
Potência Tech iFood - Desenvolvimento de Jogos
Potência Tech iFood - Programação do Zero
Comentários (0)
Recomendados para vocêWEX - End to End Engineering