Chame as funções async / await em paralelo

Tanto quanto eu entendo, no ES7 / ES2016 colocar vários em await no código funcionará de forma semelhante ao encadeamento. .then() com promises, o que significa que eles executarão um após o outro em vez de em paralelo. Então, por exemplo, nós temos este código:

 await someCall(); await anotherCall(); 

Eu entendi corretamente que anotherCall() será chamado somente quando someCall() for concluído? Qual é a maneira mais elegante de chamá-los em paralelo?

Eu quero usá-lo no nó, então talvez haja uma solução com biblioteca assíncrona?

EDIT: Eu não estou satisfeito com a solução fornecida nesta questão: Desaceleração devido à espera não paralela de promises em geradores asynchronouss , porque ele usa geradores e estou perguntando sobre um caso de uso mais geral.

Você pode esperar em Promise.all ():

 await Promise.all([someCall(), anotherCall()]); 

Combine o resultado em um código de linha (mais, concat ou qualquer outra function que você goste) também poderia fazer esse truque:

 const someResult = someCall(); const anotherResult = anotherCall(); const finalResult = [await someResult, await anotherResult] //later you can use the result with variable name. 

Exemplo de JSbin: http://jsbin.com/xerifanima/edit?js,console

Apenas certifique-se de chamar as duas funções antes de aguardar uma delas:

 // Call both functions const somePromise = someCall(); const anotherPromise = anotherCall(); // Await both promises const someResult = await somePromise; const anotherResult = await anotherPromise; 

Eu voto para:

 await Promise.all([someCall(), anotherCall()]); 

Esteja ciente do momento em que você chama as funções, isso pode causar resultados inesperados:

 // Supposing anotherCall() will trigger a request to create a new User if (callFirst) { await someCall(); } else { await Promise.all([someCall(), anotherCall()]); // --> create new User here } 

Mas seguindo sempre triggers solicitação para criar novo usuário

 // Supposing anotherCall() will trigger a request to create a new User const someResult = someCall(); const anotherResult = anotherCall(); // ->> This always creates new User if (callFirst) { await someCall(); } else { const finalResult = [await someResult, await anotherResult] } 

Eu crio uma function auxiliar paralela, pode ser que seja mais doce

 const parallel = async (...items) => { //doesn't work // return items.map(async (p) => { // return await p; // }); // works const temp = []; for (const item of items) { temp.push(await item); } return temp; }; const finalResult = await parallel(someResult(), anotherResult()); //or //const [result1, result2] = await parallel(someResult(), anotherResult());