Red de conocimiento informático - Material del sitio web - Cómo implementar todas las funciones con promesas

Cómo implementar todas las funciones con promesas

Creo que esta es una gran pregunta. Actualmente, en mi empresa, siempre que utilicemos NodeJS para el desarrollo, todo, desde marcos hasta ejemplos de aplicaciones específicas y herramientas, se ha migrado a un enfoque de desarrollo centrado en promesas. El beneficio de esto es que todos usan promesas para soluciones asincrónicas sin tener que pensar en devoluciones de llamada.

Pero siempre hay excepciones para todo. En realidad, todavía hay muchas bibliotecas en npm que aún no han implementado la promesa, como la biblioteca estándar en node. Esto dificulta que los usuarios trabajen con promesas y luego aparecen devoluciones de llamada y uno se pregunta por qué el mundo se ha vuelto un desastre.

Dios dijo que se haga la luz, ¡y así fue la luz! También me gustaría decir que Dios dijo que lo arregláramos, ¡por eso promoisify!

1 Qué es promisify

En resumen: promisify es una solución técnica que reimplementa funciones con devoluciones de llamada en promesas, resolviendo de una vez por todas cómo problemas con la reimplementación de funciones como promesas.

2 Uso de promisify

Por supuesto, el uso de promisify depende de la implementación de la promesa. Aquí elegí el pájaro azul. Porque es lo suficientemente poderoso como para que aprendamos a usar las promesas.

Lo siguiente que quiero decir es: bluebird tiene algunos métodos para usar promisify.

En la API de Jade Bird, hay dos métodos para ayudarte: promisify y promisifyall.

2.1 promisify

Promisify hace exactamente lo que dice: convierte las llamadas del formulario nodeCallback en promesas.

Aquí es necesario explicar el significado de nodeCallback.

nodeCallback es un término común en Nodojs. Qué significa: Término genérico para funciones de devolución de llamada de primer error en Nodejs.

Tiene dos significados:

firma de la función de devolución de llamada nodeCallback.

nodeCallBack La ubicación donde aparece la función de devolución de llamada.

firma de nodeCallback

La firma __must__ de esta función de devolución de llamada es así:

//Esto es correcto

función fooCallBack (err , a, b){

// algo

console.log(a,b);

}

/ /Esto está mal

función foo1CallBack(a,b,err){

}

Puedes ver que el primer parámetro de la llamada a la función fooCallBack es: err, lo que significa que el primer parámetro ____ de la función noodeCallBack debe ____ pasarse en err, no ningún otro parámetro. Siempre que se cumpla esta condición, se puede llamar a nodeCallback.

El orden en que aparece nodeCallBack

nodeCallBack debe aparecer al final de la función asincrónica, es decir:

//Esto es correcto.

función foo(a,b,nodeCallback){

/pass

}

// Esto no es nodeCallback

función foo(a,nodeCallback,b){

/pass

}

Siempre que se cumplan la firma y el pedido, puede llamarse nodeCallBack .

Entonces, ¿dónde existe nodeCallback? Déjame decirte que todos los paquetes estándar asíncronos de NodeJS están aquí.

Bien, eso es todo sobre nodeCallback. Ahora hablemos de cómo se usa promosify:

const Promise = require('bluebird');

const fs = require('fs');

// Llamar de vuelta. La devolución de llamada aquí es nodeCallback

fs.readFile('./test.js',function(err,data){

console.log(data);

});

//formulario promisify (promesa)

const readFileAsync = Promise.promisify(fs. .readFile);

readFileAsync('. /test.js').then(function(data){

console.log(data);

}).catch(console.log);

Muy sencillo ¿no? No entraré en detalles sobre la implementación específica. Si quieres saber más, puedes ir a Google.

2.2 promisifyall

Si promisify solo puede completar una función a la vez, entonces promisifyall puede completar todo el trabajo de voltear el archivo de la biblioteca a la vez.

Para aclarar, promisifyall convertirá todas las funciones de la biblioteca en promesas con el sufijo Async. Mire el código:

const Promise = require('bluebird');

const fs = Promise.promisifyall(require('fs'));

fs.readFileAsync('./test.js').then(function(data){

console.log(data);

}).catch(console. log) ;

Como se puede ver en lo anterior: fs es una biblioteca estándar y, después de promisifyall, se han prometido todas las funciones. El nombre de la función confirmada se ha convertido en: nombre de la función original + Async.