then sincronas promises promesas google funciones await javascript ecmascript-6 ecmascript-harmony ecmascript-7

javascript - sincronas - promise resolve



ES7 Obtención de resultados de una serie de promesas utilizando el generador de espera (3)

Dada una serie de promesas, ¿cuál es la forma idiomática de obtener los resultados en ES7?

Esto es lo que quiero hacer:

async function getImports() { let imports = [System.import(''./package1.js''), System.import(''./package2.js'')]; let promises = await* imports; let results = []; await promises.forEach(val => val.then(data => results.push(data))); //seems hacky console.log(results); // array of 2 resolved imports }

El resultado es correcto, pero sigo haciendo forEach y then para convertir las promesas resueltas en resultados. Esto simplemente no me parece correcto. ¿Hay alguna forma más limpia?


Como se mencionó en el problema que presentó, el problema principal es que await* ya no es una cosa y se ha eliminado. Desafortunadamente, no se estaba lanzando correctamente un error de sintaxis en Babel 6 y, en esencia, se estaba tratando como una await normal.

Tendrá que explícitamente

let [p1, p2] = await Promise.all([ System.import(''./package1.js''), System.import(''./package2.js'')]);


No puedo creer que realmente funcione, forEach que cada resultado vuelve undefined que no puedes await . Si necesita un bucle, use map para obtener una matriz de resultados (prometidos).

En tu caso, pareces estar buscando un simple

async function getImports() { let promises = [System.import(''./package1.js''), System.import(''./package2.js'')]; let results = await Promise.all(promises) console.log(results); }


Una forma de hacerlo es ...

async function abc() { let p1 = getReviews(); let p2 = getMenu(); let [reviews, menu] = await results(p1, p2); } function results(...rest) { return Promise.all(rest).catch(err => console.log(err)); }