Node.js: concepto de devoluciones de llamada
¿Qué es la devolución de llamada?
La devolución de llamada es un equivalente asincrónico de una función. Se llama a una función de devolución de llamada al completar una tarea determinada. Node hace un uso intensivo de devoluciones de llamada. Todas las API de Node están escritas de tal manera que admiten devoluciones de llamada.
Por ejemplo, una función para leer un archivo puede comenzar a leer el archivo y devolver el control al entorno de ejecución inmediatamente para que se pueda ejecutar la siguiente instrucción. Una vez que se completa la E / S del archivo, llamará a la función de devolución de llamada mientras pasa la función de devolución de llamada, el contenido del archivo como parámetro. Por lo tanto, no hay bloqueo ni espera a la E / S de archivos. Esto hace que Node.js sea altamente escalable, ya que puede procesar una gran cantidad de solicitudes sin esperar a que ninguna función devuelva resultados.
Ejemplo de código de bloqueo
Crea un archivo de texto llamado input.txt con el siguiente contenido -
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Crea un archivo js llamado main.js con el siguiente código -
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("Program Ended");
Ahora ejecute main.js para ver el resultado:
$ node main.js
Verifique la salida.
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Program Ended
Ejemplo de código sin bloqueo
Cree un archivo de texto llamado input.txt con el siguiente contenido.
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Actualice main.js para tener el siguiente código:
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log("Program Ended");
Ahora ejecute main.js para ver el resultado:
$ node main.js
Verifique la salida.
Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Estos dos ejemplos explican el concepto de llamadas bloqueantes y no bloqueantes.
El primer ejemplo muestra que el programa se bloquea hasta que lee el archivo y luego solo procede a finalizar el programa.
El segundo ejemplo muestra que el programa no espera la lectura del archivo y procede a imprimir "Programa terminado" y al mismo tiempo, el programa sin bloqueo continúa leyendo el archivo.
Por lo tanto, un programa de bloqueo se ejecuta mucho en secuencia. Desde el punto de vista de la programación, es más fácil implementar la lógica pero los programas sin bloqueo no se ejecutan en secuencia. En caso de que un programa necesite usar algún dato para ser procesado, debe mantenerse dentro del mismo bloque para que su ejecución sea secuencial.