javascript - sincronas - promise resolve
Promise.all en JavaScript: ¿Cómo obtener el valor de resolución para todas las promesas? (2)
Responde a tu segunda pregunta:
Si desea que la devolución de llamada en ese momento acepte dos argumentos diferentes, puede usar Bluebird y su método de spread
. Ver:
En lugar de .then(function (array) { ... })
y tener que acceder a array[0]
y array[1]
dentro de su manejador, podrá usar spread(function (value1, value2) { ... })
y tiene ambas variables nombradas como desee.
Esta es una característica de Bluebird, no es posible con Promise
simple.
Usas Bluebird como Promise, por ejemplo:
var P = require(''bluebird'');
// and in your code:
return new P(function (resolve, reject) { ...
// instead of:
return new Promise(function (resolve, reject) { ...
Por supuesto, no tienes que P
nombre P
sino lo que quieras.
Para ver más ejemplos, vea las hojas de trucos de Bluebird .
Escribí el siguiente archivo node.js:
var csv = require(''csv-parser'');
var fs = require(''fs'')
var Promise = require(''bluebird'');
var filename = "devices.csv";
var devices;
Promise.all(read_csv_file("devices.csv"), read_csv_file("bugs.csv")).then(function(result) {
console.log(result);
});
function read_csv_file(filename) {
return new Promise(function (resolve, reject) {
var result = []
fs.createReadStream(filename)
.pipe(csv())
.on(''data'', function (data) {
result.push(data)
}).on(''end'', function () {
resolve(result);
});
})
}
Como puede ver, utilizo Promise.all para esperar las dos operaciones de lectura de los archivos csv. No entiendo por qué, pero cuando ejecuto el código, la línea ''console.log (result)'' no se confirma.
Mi segunda pregunta es que quiero que la función de devolución de llamada de Promise.all.then () acepte dos variables diferentes, mientras que cada una de ellas es el resultado de la promesa relevante.
Primera pregunta
Promise.all toma una serie de promesas
Cambio:
Promise.all(read_csv_file("devices.csv"), read_csv_file("bugs.csv"))
a (agregar []
alrededor de argumentos)
Promise.all([read_csv_file("devices.csv"), read_csv_file("bugs.csv")])
// ---------^-------------------------------------------------------^
Segunda pregunta
The Promise.all se resuelve con una matriz de resultados para cada una de las promesas que le enviaste.
Esto significa que puede extraer los resultados en variables como:
Promise.all([read_csv_file("devices.csv"), read_csv_file("bugs.csv")])
.then(function(results) {
var first = results[0]; // contents of the first csv file
var second = results[1]; // contents of the second csv file
});
Puede usar desestructuración de ES6 + para simplificar aún más el código:
Promise.all([read_csv_file("devices.csv"), read_csv_file("bugs.csv")])
.then(function([first, second]) {
});