Red de conocimiento informático - Material del sitio web - Cómo manejar con elegancia las devoluciones de llamadas asincrónicas en Nodejs

Cómo manejar con elegancia las devoluciones de llamadas asincrónicas en Nodejs

Se utilizan bibliotecas de terceros como Async, q y Promise para manejar devoluciones de llamadas asincrónicas.

Para abordar mejor el problema de las devoluciones de llamadas anidadas, puede considerar el uso de algunas bibliotecas de terceros que se especializan en procesamiento asincrónico. Por supuesto, también puede escribir una herramienta auxiliar para el procesamiento asincrónico.

Existen bibliotecas comunes para manejar async, q y promesa. Según el sitio web npmjs.org, async es el más popular. He usado Async antes, es realmente conveniente y el flujo de control de varios procesamientos asincrónicos también está bien implementado.

Usaremos async para manejar el código inicial que lee dos archivos al mismo tiempo. Los ejemplos son los siguientes:

var async = require("async")

, fs = require(' fs ');

Paralelo asíncrono ([

Función (devolución de llamada) {

fs.readFile('/etc/passwd ', función (err, datos) {

if (err) devolución de llamada (err );

Devolución de llamada(nulo, datos);

});

},

Función (devolución de llamada){

fs.readFile('/etc/passwd2 ', function (err, data2) {

if (err) callback (err);

callback (null, data 2) ;

});

}

],

Función (error, resultado){

/ /Aquí se procesan los datos y los datos data2, y el contenido de cada archivo se obtiene de los resultados

});

A través del módulo async, el proceso de ejecución asincrónica puede. estar bien controlado y resuelto el problema de las capas de devoluciones de llamada. El código es más claro que antes, pero aún no puede prescindir de la función de devolución de llamada.

Piense en lo bueno que sería manejar la asincronía sin utilizar funciones de devolución de llamada. A continuación, hablemos sobre cómo utilizar las nuevas funciones de ES6 para lograr este objetivo.

Sea elegante: adopte ES6, reemplace las funciones de devolución de llamadas y resuelva el problema del infierno de las devoluciones de llamadas.

En otras palabras, EcmaScript Harmony (ES6) introduce muchas características nuevas en js. Los estudiantes que no saben mucho sobre ES6 pueden buscarlo ellos mismos en Baidu.

Para usar las nuevas características de ES6 en nodejs, necesita usar la versión v0.11.x o superior.

Este artículo presenta el uso de funciones generadoras en lugar de funciones de devolución de llamada. , pero ¿no sabes acerca de los generadores? Puedes echarle un vistazo aquí.

Aquí se utilizan dos módulos, co y thunkify, y todos usan el comando npm install para instalarlos.

Al inicio, para que nodejs admita las funciones de ES6, se debe agregar un parámetro -harmony, como por ejemplo: node - harmony index.js

El problema mencionado al principio de este artículo sigue siendo Por ejemplo, el código de muestra que utiliza la función de generador es el siguiente:

var fs = require('fs ')

, co = require(' co ' )

, thunkify = require(' thunkify ');

var readFile = thunkify(fs . readFile);

Director administrativo (Función*){

var prueba 1 = rendimiento readFile(' prueba 1 . txt ');

var prueba 2 = rendimiento readFile(' prueba 2 . txt '); var prueba = prueba 1 . tostring()+prueba 2. tostring();

console.log(prueba);

})();

Manejar excepciones en el código también es muy simple, está bien:

Pruebe {

var test 1 = yield readFile(' test 1 . txt '); } catch (e) {

//Maneja las excepciones aquí

}

¿No es este código mucho más elegante? ¿No sería genial manejar asíncrono de la misma manera que escribes código síncrono?

En el campo de nodejs, el framework más popular para desarrollo web es express. Vale la pena mencionar que TJ, un miembro principal de Express, lidera un nuevo marco web: KOA, conocido como el marco de desarrollo web de próxima generación. KOA realmente aprovecha el generador ES6 para evitar caer en capas de devoluciones de llamada al desarrollar sistemas web.