并行调用asynchronous/等待函数
据我所知,在ES7 / ES2016中,将多个await
的代码放在一起,类似于链接.then()
和promise,这意味着它们将一个接一个地执行,而不是在parallerl中执行。 所以,例如,我们有这样的代码:
await someCall(); await anotherCall();
我是否正确理解anotherCall()
仅在someCall()
完成时才被调用? 平行调用它们的最优雅的方式是什么?
我想在Node中使用它,所以也许有一个asynchronous库的解决scheme?
编辑:我不满意在这个问题提供的解决scheme: 由于非平行等待asynchronous生成器中的承诺放缓 ,因为它使用生成器,我在问一个更一般的用例。
你可以在Promise.all()上等待:
await Promise.all([someCall(), anotherCall()]);
将结果合并成一行代码(加上concat,或者你喜欢的任何其他函数)也可以这样做:
const someResult = someCall(); const anotherResult = anotherCall(); const finalResult = [await someResult, await anotherResult] //later you can use the result with variable name.
JSbin示例: http ://jsbin.com/wiqorinowi/1/edit?js,console
我投票赞成:
await Promise.all([someCall(), anotherCall()]);
注意你调用函数的那一刻,可能会导致意外的结果:
// 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 }
但是总是触发请求来创build新的用户
// 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] }