約束の配列を考えると、ES7で結果を得るための慣用的な方法は何ですか?
私がやりたいことは次のとおりです。
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
}
結果は正しいですが、解決済みのプロミスを結果に変えるために、forEach
とthen
をまだ実行しています。これは私には正しくないようです。よりクリーンな方法はありますか?
提出した問題で述べたように、中心的な問題はawait*
はもはやものではなく、削除されました。残念ながら、Babel 6では構文エラーが適切にスローされず、基本的に通常のawait
のように扱われていました。
明示的にする必要があります
let [p1, p2] = await Promise.all([
System.import('./package1.js'), System.import('./package2.js')]);
forEach
が実際に動作するとは信じられませんが、undefined
は返せないawait
を返します。ループが必要な場合は、map
を使用して、(約束された)結果の配列を取得します。
あなたの場合、あなたはシンプルなものを探しているようです
async function getImports() {
let promises = [System.import('./package1.js'), System.import('./package2.js')];
let results = await Promise.all(promises)
console.log(results);
}
これを行う1つの方法....
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));
}