"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Patrones asíncronos en Node.js - Tutorial de Node.js - Parte 6

Patrones asíncronos en Node.js - Tutorial de Node.js - Parte 6

Publicado el 2024-11-02
Navegar:226

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

Patrones asíncronos en Node.js

Node.js opera en una arquitectura basada en eventos de un solo subproceso, lo que significa que puede manejar muchas operaciones simultáneamente sin bloquear el subproceso principal. Esto es crucial para crear aplicaciones escalables donde tareas como operaciones de E/S (lectura de archivos, consulta de bases de datos, etc.) deben realizarse de forma asincrónica para evitar bloquear la ejecución de otro código.

Escribir código asíncrono frente a sincronización

Código sincrónico

El código sincrónico se ejecuta un paso a la vez, lo que significa que cada paso debe completarse antes de pasar al siguiente. Esto puede bloquear el hilo principal si las operaciones son lentas (por ejemplo, leer un archivo grande o consultar una base de datos).

Ejemplo (Código síncrono):

const fs = require('fs');

const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
  • Problema: Si readFileSync tarda mucho tiempo (por ejemplo, el archivo es grande), toda la aplicación se bloqueará durante este período.

Código asincrónico

El código asincrónico, por otro lado, no bloquea el hilo principal. En lugar de esperar a que se complete una operación, el programa continúa ejecutándose y maneja el resultado de la operación asíncrona cuando está listo.

Ejemplo (Código asincrónico):

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!');
  • En este ejemplo, el archivo se lee de forma asincrónica y el programa no se bloquea; la línea console.log('¡Esto se registrará antes que el contenido del archivo!') se ejecuta mientras el archivo aún se está leyendo.

Cuándo utilizar síncrono frente a asíncrono

  • El código sincrónico está bien para tareas pequeñas o scripts donde el rendimiento no es una preocupación.
  • El código asincrónico es ideal para aplicaciones con muchas E/S, como servidores web, donde no desea bloquear el hilo principal mientras espera operaciones como consultas de bases de datos o solicitudes HTTP.

Asíncrono/Espera

Introducido en ES2017 (Node.js 7.6), async/await es azúcar sintáctico construido sobre promesas. Permite escribir código asincrónico de forma síncrona, lo que lo hace más legible y fácil de mantener.

Ejemplo (Async/Await):

   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();

Resumen

  • Las devoluciones de llamadas son ​​simples pero pueden llevar a un infierno de devoluciones de llamadas.
  • Promesas limpian el infierno de devoluciones de llamadas y brindan un mejor manejo de errores.
  • Async/Await hace que el código asincrónico parezca sincrónico, lo que mejora la legibilidad.

La elección del código asíncrono o de sincronización depende de su caso de uso. Para operaciones con mucha E/S, prefiera siempre los patrones asincrónicos para mantener el hilo principal sin bloqueo y su aplicación con capacidad de respuesta.

¡Gracias por leer y feliz codificación! ?

Declaración de liberación Este artículo se reproduce en: https://dev.to/hakimmohamed/async-patterns-in-nodejs-1e10?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3