¿Qué es el flujo de control asincrónico en Node.js?

Que Es El Flujo De Control Asincronico En Node Js



El flujo de control es la forma de ejecución en la que se ejecuta el proceso residente de su aplicación. Este flujo ayuda mucho cuando desea ejecutar una parte específica de todo el programa primero o después de completar un método aleatorio. El flujo de ejecución generalmente se establece en asíncrono o sincrónico según la naturaleza del método que se utiliza.

Este artículo explica el funcionamiento y la implementación del flujo de control asincrónico en Node.js.

¿Qué es el flujo de control asincrónico en Node.js?

El flujo de control asincrónico en Node.js se refiere a la forma en que administra y controla el flujo de ejecución cuando se trata de operaciones asincrónicas, como realizar solicitudes de red, manejar eventos, etc. Aunque Node.js está diseñado específicamente para una naturaleza asincrónica, es mejor asegurarse de que el código específico se ejecute en la secuencia prevista y realice un manejo de errores de manera efectiva.







Tengamos un ejemplo de código para mejorar el nivel de comprensión del flujo de control asincrónico:



era fsObj = requerir ( 'fs' ) ;
//Función de devolución de llamada abstracta
función leerFileAsync ( rutadelarchivodestino ) {
  devolver nuevo Promesa ( ( resolver, rechazar ) => {
fsObj. leer archivo ( ruta del archivo objetivo, 'utf-8' , ( error, contenido ) => {
      si ( error ) {
rechazar ( error ) ;
      } demás {
resolver ( contenido ) ;
      }
    } ) ;
  } ) ;
}

// Función para realizar múltiples lecturas de archivos en secuencia
función asíncrona readFileSequentially ( ) {
  intentar {
    constante archivo1Datos = espera readFileAsync ( 'minuevoarchivo1.txt' ) ;
consola. registro ( 'Datos del primer archivo:' , archivo1Datos ) ;

    constante archivo2Datos = espera readFileAsync ( 'caso de uso.txt' ) ;
consola. registro ( 'Datos del segundo archivo:' , archivo2Datos ) ;

    constante archivo3Datos = espera readFileAsync ( 'paquete.json' ) ;
consola. registro ( 'Datos del tercer archivo:' , archivo3Datos ) ;
  } atrapar ( error ) {
consola. error ( 'Error ocurrido:' , error ) ;
  }
}

leer archivo secuencialmente ( ) ;

La explicación del código anterior es la siguiente:



  • Primero, importe el ' fs 'Módulo y almacenar su objeto en el' fsObj ' variable.
  • Luego, define un “ leerFileAsync() 'Función nombrada que tiene el único parámetro de' rutadelarchivodestino ”que contiene la ruta de un archivo de destino.
  • Esta función devuelve un “ promesa ' que contiene la función de devolución de llamada requerida que consta de dos parámetros, a saber ' resolver ' y ' rechazar ”.
  • Dentro de la función de devolución de llamada, invoque el ' leer archivo() 'Método proporcionado por el' fs ”módulo. Además, pase el parámetro proporcionado de ' rutadelarchivodestino ”como primer parámetro para el método “readFile()”.
  • El ' leer archivo El método también contiene la función de devolución de llamada requerida que tiene los parámetros de ' error ' y ' contenido ”. Pasa el ' error ' en el ' rechazar() ' método en caso de aparición de errores y ' contenido ' en el ' resolver() 'Método en caso de que no se encuentre ningún error.
  • Ahora, cree una función asincrónica llamada ' leer archivo secuencialmente() ' y contiene un ' trata de atraparlo ' bloquear.
  • Dentro de ' intentar ” bloque, crea tres variables almacenando el resultado generado al invocar el “ ya creado leerFileAsync() ' función. Cada vez, la ruta del archivo deseado que debe ejecutarse se pasa dentro de este paréntesis de función.
  • La palabra clave “ esperar 'También se coloca detrás de la función en el momento de invocarla para detener el flujo de control hasta que se complete la acción de leer el archivo.
  • Además, muestre las variables en la consola para mostrar el contenido del archivo recuperado o leído.
  • Finalmente, invoca el contenido ' leer archivo secuencialmente() ' función.

Para ejecutar, coloque el código indicado anteriormente en el archivo deseado que tenga una extensión de ' .js ”que reside dentro de su proyecto Node.js. El expediente principal en nuestro caso es “ controlFlow.js ”, por lo que nuestro comando de ejecución será el siguiente:





flujo de control de nodo. js

El resultado generado muestra que los datos de los archivos deseados que utilizan el flujo de control asíncrono se muestran en secuencia:



¿Cuáles son las posibles causas y pasos a seguir para el código bloqueado de Node.js?

El código síncrono también se conoce como “ Código de bloqueo ”ya que detiene la ejecución de procesos hasta la ejecución del proceso en ejecución. Esto da como resultado un rendimiento y una capacidad de respuesta deficientes de la aplicación. El código de bloqueo generalmente ocurre debido a operaciones sincrónicas o vinculadas a la CPU. Las posibles causas del bloqueo de código y cómo evitarlas se indican a continuación en la tabla:

Causas del bloqueo de código Solución para bloqueo de código
Uso de operaciones de archivos síncronas como fs.readFileSync(). Utilice operaciones de archivos asincrónicas como fs.readFile.
Uso de operaciones vinculadas a la CPU, como cálculos pesados ​​o bucles de larga duración. Descargue tareas vinculadas a la CPU a subprocesos de trabajo dividiéndolas en partes más pequeñas y sin bloqueo.
Solicitudes de red externa lentas debido al uso de solicitudes HTTP para API remotas Utilice bibliotecas HTTP asincrónicas como Axios o los módulos “http” o “https” integrados.
Consultas de bases de datos no optimizadas Optimice las consultas de la base de datos utilizando las herramientas de optimización de consultas proporcionadas por la base de datos.
Uso de bucles infinitos o bucles cerrados sin interrupciones. Asegúrese de que los bucles tengan condiciones de salida y no se ejecuten infinitamente.

Conclusión

El flujo de control asíncrono utiliza las palabras clave ' asíncrono/espera ”para modificar o controlar el flujo de ejecución de forma asincrónica. La devolución de llamada para el método asincrónico requerido se abstrae y se almacena en una función separada. Luego, esta función se invoca con la ayuda de la palabra clave await de forma secuencial junto con otros métodos, según se desee. Estas funciones se almacenan en otra función asincrónica personalizada que luego se invoca para iniciar la ejecución. Esta guía explica el flujo de control asincrónico en Node.js.