"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Padrões assíncronos em Node.js - Tutorial Node.js - Parte 6

Padrões assíncronos em Node.js - Tutorial Node.js - Parte 6

Publicado em 2024-11-02
Navegar:202

Async Patterns in Node.js - Node.js Tutorial - Part 6

Padrões assíncronos em Node.js

Node.js opera em uma arquitetura orientada a eventos de thread único, o que significa que ele pode lidar com muitas operações simultaneamente sem bloquear o thread principal. Isso é crucial para a criação de aplicativos escalonáveis ​​onde tarefas como operações de E/S (leitura de arquivos, consulta de bancos de dados, etc.) precisam acontecer de forma assíncrona para evitar o bloqueio da execução de outro código.

Escrevendo código assíncrono vs. sincronizado

Código Síncrono

O código síncrono executa uma etapa de cada vez, o que significa que cada etapa deve ser concluída antes de passar para a próxima. Isso pode bloquear o thread principal se as operações forem lentas (por exemplo, lendo um arquivo grande ou consultando um banco de dados).

Exemplo (código síncrono):

const fs = require('fs');

const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
  • Problema: Se o readFileSync demorar muito (por exemplo, o arquivo for grande), todo o aplicativo será bloqueado durante esse período.

Código Assíncrono

O código assíncrono, por outro lado, não bloqueia o thread principal. Em vez de aguardar a conclusão de uma operação, o programa continua a execução e trata o resultado da operação assíncrona quando estiver pronto.

Exemplo (código assíncrono):

const fs = require('fs');
// Call Back
fs.readFile('file.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

console.log('This will log before the file content!');
  • Neste exemplo, o arquivo é lido de forma assíncrona e o programa não bloqueia; a linha console.log('This will log before the file content!') é executada enquanto o arquivo ainda está sendo lido.

Quando usar síncrono versus assíncrono

  • Código síncrono é adequado para pequenas tarefas ou scripts onde o desempenho não é uma preocupação.
  • Código assíncrono é ideal para aplicativos com muita E/S, como servidores web, onde você não deseja bloquear o thread principal enquanto espera por operações como consultas de banco de dados ou solicitações HTTP.

Assíncrono/Aguardar

Introduzido no ES2017 (Node.js 7.6), async/await é um açúcar sintático construído com base em promessas. Ele permite que o código assíncrono seja escrito de maneira síncrona, tornando-o mais legível e fácil de manter.

Exemplo (assíncrono/espera):

   const fs = require('fs').promises;

   async function readFile() {
     try {
       const data = await fs.readFile('file.txt', 'utf8');
       console.log(data);
     } catch (err) {
       console.error(err);
     }
   }

   readFile();

Resumo

  • Callbacks são simples, mas podem levar a um inferno de retornos de chamada.
  • Promessas limpam o inferno de retorno de chamada e fornecem melhor tratamento de erros.
  • Async/Await faz com que o código assíncrono pareça síncrono, melhorando a legibilidade.

A escolha do código assíncrono versus código de sincronização depende do seu caso de uso. Para operações com muita E/S, sempre prefira padrões assíncronos para manter o thread principal sem bloqueio e seu aplicativo responsivo.

Obrigado por ler e boa codificação! ?

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/hakimmohamed/async-patterns-in-nodejs-1e10?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3