如何处理异步/等待地狱?

时间:2019-02-08 02:26:43

标签: 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()之前完成执行?

1 个答案:

答案 0 :(得分:14)

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

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