Cómo implementar todas las funciones con promesas
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.