ES7使用await生成器从一组promise中获取结果

Mat*_*t K 26 javascript ecmascript-harmony ecmascript-6 ecmascript-7

鉴于一系列承诺,在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
}
Run Code Online (Sandbox Code Playgroud)

结果是正确的,但我仍然在做a forEach和a then将已解决的承诺转化为结果.这对我来说似乎不对.有更干净的方式吗?

log*_*yth 38

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

你需要明确地

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

  • 规格始终是最好看的地方.建议的规范语法在https://github.com/tc39/ecmascript-asyncawait/blob/master/spec/syntax.html中,并且只定义了`await UnaryExpression`. (2认同)