Solución:
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
los Promise.all
se resuelve con una serie de resultados para cada una de las promesas que le hizo.
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 la 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]) {
});
Responda a su segunda pregunta:
Si quieres el then
callback para aceptar dos argumentos diferentes, entonces puede usar Bluebird y su spread
método. Ver:
- http://bluebirdjs.com/docs/api/spread.html
En lugar de .then(function (array) { ... })
y tener que acceder array[0]
y array[1]
dentro de tu then
manejador que podrás usar spread(function (value1, value2) { ... })
y tener ambas variables con el nombre que desee.
Esta es una característica de Bluebird, no es posible con Promise
.
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 que no tienes que nombrarlo P
pero lo que tu quieras.
Para obtener más ejemplos, consulte las hojas de trucos Bluebird.