Saltar al contenido

Promise.all en JavaScript: ¿Cómo obtener valor de resolución para todas las promesas?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *