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

Javascript ES7使用等待生成器从一系列承诺中获取结果,javascript,ecmascript-6,ecmascript-harmony,ecmascript-2016,Javascript,Ecmascript 6,Ecmascript Harmony,Ecmascript 2016,给定一系列承诺,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 =&

给定一系列承诺,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中正确地抛出语法错误,并且基本上被当作正常的
wait

您需要明确地

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

我不敢相信它真的有效,
forEach
确实返回了
undefined
,您不能
wait
。如果需要循环,请使用
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));
}

承诺
是否已包含已解析的值?至少这就是让结果=等待*[Promise.resolve(1),Promise.resolve(2)]对我有帮助吗?是的,
中的每个条目都包含一个
[[PromiseValue]]
,但是如果没有
forEach
then
,我不知道如何访问它们,这很有趣。我刚刚试着用巴贝尔传输上面的内容,它给了我正确的值。你用什么来传送?我用的是巴别塔6。你是说
promissions
返回结果&而不是promissions?
async/await
的关键是不再手动使用promissions。它隐藏在异步函数后面,正在等待异步函数。哦,伙计,很抱歉听到它不会向前发展,但谢谢你让我知道!如果你手边有它,你能给我指一个关于ESDiscussion的链接吗?或者它曾在哪里被拒绝过?(这个特殊的东西很难搜索,因为没有引擎索引
await*
)规范总是最好的地方。建议的规范语法在中,仅定义了
await-UnaryExpression
。您可能想看看Promise。bluebird的每一种方法都可以使此代码更具表达力,即使使用ES7 async-await,也有很好的理由使用bluebird这样的帮助程序库