ES7 使用等待生成器从一系列承诺中获取结果

ES7 Getting result from an array of promises using await generator

给定一组 promises,在 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
}

结果是正确的,但我仍在做 forEachthen 以将已解决的承诺变成结果。这对我来说似乎不对。有没有更清洁的方法?

正如您提交的问题中提到的,核心问题是 await* 不再存在并且已被删除。不幸的是,它没有在 Babel 6 中正确地抛出语法错误,并且基本上被当作正常的 await.

您需要明确

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

我不敢相信它真的有效,forEach 可以 return 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);
}

这样做的一种方法....

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