ES7 Getting result from an array of promises using await generator

Matt K picture Matt K · Dec 20, 2015 · Viewed 15.9k times · Source

Given an array of promises, what's the idiomatic way to get the results in ES7?

Here's what I want to do:

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
}

The result is correct, but I'm still doing a forEach and a then to turn the resolved promises into results. This just doesn't seem right to me. Is there a cleaner way?

Answer

loganfsmyth picture loganfsmyth · Dec 20, 2015

As mentioned in the issue you filed, the core issue is that await* is no longer a thing and has been removed. Unfortunately, it was not properly throwing a syntax error in Babel 6 and was essentially being treated like a normal await.

You'll need to explicitly

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