Funciones Callback en Node.js
- Use la función callback para leer un archivo sincrónicamente (código de bloqueo) en Node.js
- Use la función callback para leer un archivo de forma asíncrona (código sin bloqueo) en Node.js
Una función callback es una función que se ejecuta después de que se haya ejecutado un conjunto de tareas, evitando el bloqueo de todo el programa. Las funciones callback son un aspecto importante de la escritura de programas asincrónicos y sin bloqueo en Node.js.
En JavaScript, las funciones callback se denominan formalmente funciones que pasan como argumentos a otras funciones. Dado que las funciones de JavaScript se ejecutan en el orden en que se llaman, el uso de callback nos permite controlar mejor cómo se ejecutan las funciones.
Supongamos que tenemos dos funciones estrechamente relacionadas, de modo que el resultado de una función se usa como parámetro en la otra función. En tal escenario, la función inicial siempre bloqueará la segunda función hasta que el resultado de la función inicial esté listo.
Sin embargo, al usar funciones callback, podemos asegurarnos de que la función inicial siempre ejecutará la última función como una función callback después de que termine de ejecutar sus instrucciones, como se muestra a continuación.
function print(callback) {
callback();
}
Use la función callback para leer un archivo sincrónicamente (código de bloqueo) en Node.js
Las callback de Node.js forman la base de la ejecución de operaciones asincrónicas, lo que hace que Node.js sea adecuado para desarrollar aplicaciones intensivas de E/S. Tales aplicaciones a menudo implican obtener grandes cantidades de datos del servidor.
La carga de datos grandes es un proceso largo y, por lo tanto, sentarse y esperar a que el programa cargue los datos por completo antes de ejecutar el resto no es una buena práctica.
En el siguiente ejemplo, usamos el módulo fs
en Node.js para leer datos sincrónicamente antes de ejecutar el resto del código.
// Write JavaScript code
var fs = require('fs');
var filedata = fs.readFileSync('usersinfo.txt');
console.log(filedata.toString());
console.log('Other parts of the program that execute afterwards');
console.log('End of program execution');
Salida de muestra:
First name: john
Last name: Doe
Occupation: Microservices Developer
Other parts of the program that execute afterward
End of program execution
Use la función callback para leer un archivo de forma asíncrona (código sin bloqueo) en Node.js
La lectura sincrónica de un archivo bloquea la ejecución de partes de otros programas hasta que los datos se leen por completo. En los casos en que los datos son enormes, es posible que tengamos que esperar un poco más.
Sin embargo, como se muestra a continuación, podemos ejecutar una función que lea esos datos de forma asíncrona en segundo plano utilizando funciones callback mientras se ejecutan otras partes del programa.
var fs = require('fs');
fs.readFile('usersinfo.txt', function(err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log('Other parts of the program that execute afterward');
Salida de muestra:
Other parts of the program that execute afterward
firstname: john
lastname: Doe
Occupation: Microservices Developer
Usando el concepto de función callback en los programas anteriores, podemos ejecutar otras partes de los programas a medida que los datos se cargan en segundo plano.
Además, en el código anterior, también hemos seguido la convención estándar de devolver errores como primer argumento en la función callback. El primer objeto, si no es nulo, debe considerarse como el objeto de error; de lo contrario, debe permanecer nulo.
Proporciona una forma más fácil de saber que se ha producido un error. Tradicionalmente, dado que la función callback está destinada a ejecutarse después de que la función principal haya terminado de realizar otras operaciones, es una práctica común tenerla como segundo parámetro.
Se espera que prácticamente cualquier función asíncrona que utilice la función callback siga la sintaxis que se indica a continuación en Node.js.
function asyncOperation(param1, param2, callback) {
// operations to be executed
if (err) {
console.log('An error has occured!');
return callback(new Error('An error'));
}
// ... more work ...
callback(null, param1, param2);
}
asyncOperation(parameters, function(err, returnValues) {
// This code gets run after the async operation
});
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedIn