O que é fluxo de controle assíncrono em Node.js?

O Que E Fluxo De Controle Assincrono Em Node Js



O fluxo de controle é a forma de execução na qual o processo residente da sua aplicação é executado. Este fluxo ajuda muito quando você deseja executar uma parte específica de todo o programa primeiro ou após a conclusão de um método aleatório. O fluxo de execução geralmente é definido como assíncrono ou síncrono de acordo com a natureza do método que está sendo utilizado.

Este artigo explica o funcionamento e a implementação do fluxo de controle assíncrono em Node.js.

O que é fluxo de controle assíncrono em Node.js?

O fluxo de controle assíncrono em Node.js refere-se à maneira como você gerencia e controla o fluxo de execução ao lidar com operações assíncronas, como fazer solicitações de rede, manipular eventos e assim por diante. Embora o Node.js seja projetado especificamente para uma natureza assíncrona, é melhor garantir que o código específico seja executado na sequência pretendida e execute o tratamento de erros de maneira eficaz.







Vejamos um exemplo de código para aumentar o nível de compreensão do fluxo de controle assíncrono:



era fsObj = exigir ( 'fs' ) ;
//Função de retorno de chamada abstrata
função readFileAsync ( targetFilePath ) {
retornar novo Promessa ( ( resolver, rejeitar ) => {
fsObj. arquivo lido ( targetFilePath, 'utf-8' , ( erro, conteúdo ) => {
se ( erro ) {
rejeitar ( erro ) ;
} outro {
resolver ( contente ) ;
}
} ) ;
} ) ;
}

//Função para realizar múltiplas leituras de arquivos em sequência
função assíncrona readFileSequentially ( ) {
tentar {
const arquivo1Dados = aguarde readFileAsync ( 'meunovoarquivo1.txt' ) ;
console. registro ( 'Dados do primeiro arquivo:' , arquivo1Dados ) ;

const arquivo2Dados = aguarde readFileAsync ( 'usecase.txt' ) ;
console. registro ( 'Dados do segundo arquivo:' , arquivo2Dados ) ;

const arquivo3Dados = aguarde readFileAsync ( 'pacote.json' ) ;
console. registro ( 'Dados do terceiro arquivo:' , arquivo3Dados ) ;
} pegar ( erro ) {
console. erro ( 'Erro ocorrido:' , erro ) ;
}
}

readFileSequencialmente ( ) ;

A explicação do código acima é a seguinte:



  • Primeiro, importe o “ fs ”Módulo e armazene seu objeto no“ fsObj ' variável.
  • Em seguida, defina um “ readFileAsync() ”Função nomeada com o único parâmetro de“ targetFilePath ”que contém o caminho para um arquivo de destino.
  • Esta função retorna um “ promessa ”que contém a função de retorno de chamada necessária que consiste em dois parâmetros, a saber“ resolver ' e ' rejeitar ”.
  • Dentro da função de retorno de chamada, invoque o “ lerArquivo() ”método fornecido pelo“ fs ”módulo. Além disso, passe o parâmetro fornecido de “ targetFilePath ” como o primeiro parâmetro para o método “readFile()”.
  • O ' arquivo lido ”O método também contém a função de retorno de chamada necessária com os parâmetros de“ erro ' e ' contente ”. Passe o ' erro ' no ' rejeitar() ”método em caso de ocorrência de erros e“ contente ' no ' resolver() ”Método em caso de nenhum erro encontrado.
  • Agora, crie uma função assíncrona chamada “ readFileSequencialy() ”E contém um“ tentar/pegar ' bloquear.
  • Dentro de ' tentar ”Bloco, crie três variáveis ​​​​armazenando o resultado gerado pela invocação do já criado“ readFileAsync() ”função. Cada vez que o caminho do arquivo desejado que precisa ser executado é passado entre parênteses desta função.
  • A palavra-chave “ aguardam ”Também é colocado atrás da função no momento da chamada para interromper o fluxo de controle até que a ação de leitura do arquivo seja concluída.
  • Além disso, exiba as variáveis ​​no console para exibir o conteúdo do arquivo recuperado ou lido.
  • Finalmente, invoque o que contém “ readFileSequencialy() ”função.

Para executar, coloque o código acima no arquivo desejado com a extensão “ .js ” residindo dentro do seu projeto Node.js. O arquivo principal em nosso caso é “ controlFlow.js ”, então nosso comando de execução será o seguinte:





nó controlFlow. js

A saída gerada mostra que os dados dos arquivos desejados usando fluxo de controle assíncrono são exibidos em sequência:



Quais são as possíveis causas e etapas para evitar o código bloqueado do Node.js?

O código síncrono também é conhecido como “ Código de bloco ”pois interrompe a execução dos processos até a execução do processo em execução. Isso resulta em baixo desempenho e capacidade de resposta do aplicativo. O código de bloqueio normalmente ocorre devido a operações síncronas ou vinculadas à CPU. As possíveis causas do bloqueio de código e como evitá-las estão indicadas abaixo na tabela:

Causas para bloqueio de código Solução para bloqueio de código
Uso de operações de arquivo síncronas como fs.readFileSync(). Use operações de arquivo assíncronas como fs.readFile.
Uso de operações vinculadas à CPU, como cálculos pesados ​​ou loops de longa duração. Transfira tarefas vinculadas à CPU para threads de trabalho, dividindo-as em partes menores e sem bloqueio.
Solicitações de rede externa lentas devido ao uso de solicitações HTTP para APIs remotas Use bibliotecas HTTP assíncronas como Axios ou os módulos “http” ou “https” integrados.
Consultas de banco de dados não otimizadas Otimize as consultas do banco de dados usando as ferramentas de otimização de consultas fornecidas pelo banco de dados.
Uso de loops infinitos ou loops apertados sem interrupções. Certifique-se de que os loops tenham condições de saída e não sejam executados infinitamente.

Conclusão

O fluxo de controle assíncrono utiliza as palavras-chave “ assíncrono/aguardar ”para modificar ou controlar o fluxo de execução de forma assíncrona. O retorno de chamada para o método assíncrono necessário é abstraído e armazenado em uma função separada. Esta função é então invocada com a ajuda da palavra-chave await de maneira sequencial junto com outros métodos conforme desejado. Essas funções são armazenadas em outra função assíncrona personalizada que é então invocada para iniciar a execução. Este guia explicou o fluxo de controle assíncrono em Node.js.