javascript - 如何应对 async/await hell ?

标签 javascript node.js asynchronous async-await

我有以下内容...

let user;
let room;
await (async () => {
  user = User.findOne({ room_id: data.room_id });  
  room = Room.findOne({ room_id: data.room_id }); 
})();

await console.log(user, room);

我有多个数据库查询,我希望它们是异步的,同时我希望将结果保存到变量中。我尝试了上面的代码,但是一旦到达 console.log ,两个查询都尚未执行。我可以让它工作的唯一方法是将其更改为以下内容...

let user = await User.findOne({ room_id: data.room_id });  
let room = await Room.findOne({ room_id: data.room_id }); 

await console.log(user, room);

是否没有办法让查询异步执行,但在到达 console.log() 之前完成执行?

最佳答案

使用 Promise.all 等待多个并行 Promise 完成:

let [user, room] = await Promise.all([
  User.findOne({ room_id: data.room_id }),
  Room.findOne({ room_id: data.room_id })
]);

关于javascript - 如何应对 async/await hell ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54585269/

相关文章:

javascript - 从对象中获取值

javascript - 选项页面上的 localStorage 为空

javascript - heroku for node : ! Heroku 推送被拒绝,没有检测到 Cedar 支持的应用程序

node.js - Elasticsearch 查询未给出结果,并显示待处理请求

wpf - 如何在 WPF 中的异步操作期间阻止 UI

java - 如何在一个@Async中使用不同的执行器

javascript - nightwatch 中有没有办法访问按钮的 onClick 处理程序代码?

javascript - AngularJS 传递 {} 而不是 null

node.js - 使用 Node.js 执行 PM2 命令

C# Fire and Forget 任务并丢弃