并行调用asynchronous/等待函数

据我所知,在ES7 / ES2016中,将多个await的代码放在一起,类似于链接.then()和promise,这意味着它们将一个接一个地执行,而不是在parallerl中执行。 所以,例如,我们有这样的代码:

 await someCall(); await anotherCall(); 

我是否正确理解anotherCall()仅在someCall()完成时才被调用? 平行调用它们的最优雅的方式是什么?

我想在Node中使用它,所以也许有一个asynchronous库的解决scheme?

编辑:我不满意在这个问题提供的解决scheme: 由于非平行等待asynchronous生成器中的承诺放缓 ,因为它使用生成器,我在问一个更一般的用例。

3 Solutions collect form web for “并行调用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] } 
  • 内存限制在Node.js(和铬V8)
  • 如何访问Mongoose预先存在的collections?
  • 什么是Node.js最好的testing框架?
  • 在Node.js中限制asynchronous调用
  • Sequelize.js:如何使用迁移和同步
  • Rediscaching和Mongo的持久性架构
  • 节点js ECONNRESET
  • 在大多数端口上侦听时Node.js EACCES错误
  • 凉亭命令未find
  • Node.js产生subprocess并获得terminal输出
  • (node:3341)DeprecationWarning:Mongoose:mpromise