English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de NodeJS

NodeJS Express.js

NodeJS Buffer & URL;

NodeJS MySql

NodeJS MongoDB

NodeJS Archivo (FS)

Otras herramientas de NodeJS

Funciones de callback en Node.js

Función de devolución de llamada de Node.jsLa asincronía es uno de los factores básicos que han hecho que Node.js sea popular. La devolución de llamada es la implementación de la función asincrónica. En general, la mayoría de las funciones de procesamiento de recursos en Node.js tienen una variante de devolución de llamada.

Cuando se llama a un recurso para una tarea asincrónica, se permite que el control continúe ejecutando las instrucciones posteriores a la función inmediatamente. Se iniciará paralelamente la tarea en el recurso. Esto puede ayudar Node.js continúa ejecutando otras tareas mientras esta función utiliza el recurso. Una vez completada la tarea que utiliza el recurso, Node.js utiliza la función de devolución de llamada para restaurar. Llamada Las funciones de devolución de llamada tienen parámetros: objeto de datos, objeto de resultados y (o) objeto de errores que contiene información relacionada con la tarea.

Funciones bloqueantes:En contraste con las funciones asincrónicas, las funciones sincrónicas ejecutan bloques hasta que se complete el recurso. Por lo tanto, las funciones sincrónicas también se denominan funciones bloqueantes.

Funciones de devolución de llamada anidadas de Node.js Si se realizan múltiples operaciones en sucesión en un recurso y deben realizarse de manera asincrónica, se pueden anidar las funciones de devolución de llamada.

Ahora, al leer (tarea) archivos (recursos), veremos tres situaciones en comparación con las funciones de devolución de llamada y las funciones bloqueantes.

  • Ejemplo de función bloqueante de Node.js

  • Ejemplo de función de devolución de llamada de Node.js

  • Ejemplo de función de devolución de llamada anidada de Node.js

Ejemplo de función bloqueante

A continuación, se muestra un ejemplo de script de nodo que lee el archivo sample.txt de manera sincrónica.

 var fs = require('fs'); 
 
// Lectura del archivo sample.txt
var data = fs.readFileSync('sample.txt'); 
console.log("Finalización de la lectura del archivo: ") + new Date().toISOString()); 
 
console.log("Después de la declaración readFileSync : ", + new Date().toISOString());

Cuando se ejecuta el siguiente programa

Salida de terminal

 arjun@arjun-VPCEH26EN:~/nodejs$ node read-file-sync.js 
Finalización de la lectura del archivo: 2017-10-19T12:21:40.103Z
Después de la declaración readFileSync : 2017-10-19T12:21:40.105Z

La declaración after readFileSync se ejecuta siempre después de que se completa la lectura del archivo. fs.readFileSync bloquea el flujo de ejecución.

Ejemplo de función de devolución de llamada de Node.js

A continuación, se muestra un ejemplo de script de nodo, que utilizaFunción de devolución de llamada de Node.jsLectura asincrónica del archivo sample.txt.

 var fs = require('fs'); 
 
// Lectura del archivo sample.txt
fs.readFile('sample.txt', 
    // La función de devolución de llamada llamada cuando se completa la lectura del archivo
    function(err, data) {  
        if (err) throw err; 
        // Los datos son una zona de memoria buffer que contiene el contenido del archivo
        console.log("Finalización de la lectura del archivo: ") + new Date().toISOString()); 
 }); 
 
console.log("Después de la lectura asíncrona de readFile: "); + new Date().toISOString());

Cuando se ejecuta el siguiente programa

Salida de terminal

arjun@arjun-VPCEH26EN:~/nodejs$ node read-file-async.js 
Después de la lectura asíncrona de readFile: 2017-10-19T12:25:36.982Z
Finalización de la lectura del archivo: 2017-10-19T12:25:36.987Z

Usted podría notar que, incluso después de ejecutar console.log en la declaración asíncrona readFile, se necesita aproximadamente5milisegundos. file. fs.readFile('sample.txt', función de devolución de llamada {..}) no bloquea la ejecución, sino que lanza un nuevo proceso en paralelo con el flujo de control principal para leer el archivo (ejecutar tareas en recursos).

Ejemplo de función de devolución de llamada anidada de Node.js

Para demostrar las funciones de devolución de llamada anidadas de Node.js, consideraremos el esquema de renombrar un archivo y luego eliminarlo usando una función asíncrona.

 var fs = require('fs'); 
 
fs.rename('sample.txt', 'sample_old.txt', 
    // Primera función de devolución de llamada
    function (err) { 
        if (err) throw err; 
        console.log('Archivo renombrado.'); 
        fs.unlink('sample_old.txt', 
            // Segunda función de devolución de llamada
            function (err) { 
                if (err) throw err; 
                console.log('Archivo eliminado.'); 
            } 
        );  
    } 
 );

Cuando se ejecuta el siguiente ejemplo de Node.js con node

Salida de terminal

 arjun@arjun-VPCEH26EN:~/nodejs$ node nodejs-anidado-callback.js 
Archivo renombrado. 
Archivo eliminado.

Conclusión:

En esta guía de Node.js, aprendimos sobre el flujo de ejecución de las funciones de devolución de llamada y cómo implementan la no-bloqueo, así como cómo combinar funciones de devolución de llamada anidadas con ejemplos.