Wie lautet der idiomatische Weg, um mit ES7 eine Reihe von Versprechen zu erhalten?
Folgendes möchte ich tun:
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
}
Das Ergebnis ist korrekt, aber ich mache immer noch eine forEach
und eine then
, um die gelösten Versprechen in Ergebnisse umzuwandeln. Das scheint mir einfach nicht richtig zu sein. Gibt es einen saubereren Weg?
Wie in dem von Ihnen eingereichten Problem erwähnt, besteht das Kernproblem darin, dass await*
keine Sache mehr ist und entfernt wurde. Leider hat es in Babel 6 keinen Syntaxfehler gegeben und wurde im Wesentlichen wie ein normales await
behandelt.
Sie müssen explizit
let [p1, p2] = await Promise.all([
System.import('./package1.js'), System.import('./package2.js')]);
Ich kann nicht glauben, dass es tatsächlich funktioniert, forEach
gibt undefined
zurück, die Sie nicht await
können. Wenn Sie eine Schleife benötigen, verwenden Sie map
, um ein Array von (versprochenen) Ergebnissen zu erhalten.
In Ihrem Fall scheinen Sie nach einem einfachen zu suchen
async function getImports() {
let promises = [System.import('./package1.js'), System.import('./package2.js')];
let results = await Promise.all(promises)
console.log(results);
}
Eine Möglichkeit, dies zu tun ....
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));
}