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));
}