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.