mongoose findOne: отличается между асинхронностью и синхронизацией

#node.js #asynchronous #mongoose #async-await

Вопрос:

Я не понимаю, в чем разница между :

 var users = Users.findOne({key})

var users = await Users.findOne({key})
 

Ответ №1:

 var users = Users.findOne({key})
 

Users.findOne() метод возвращает обещание, которое может быть либо разрешено, либо отклонено. См. обещания

Итак, в приведенном выше случае переменная users фактически содержит promise объект, и если вы хотите получить разрешенные данные, вам нужно сделать что-то вроде

 users.then(data=>{
// your db query data
}).catch(err=>{
// error if something goes wrong
})



    
 

Приведенный ниже синтаксис с await фактически дает вам разрешенные данные promise см. await

  var users = await Users.findOne({key})
 

таким образом, у вас будут такие данные [{key:value}] вашего mongodb, которые хранятся в users переменной.

Также await допустимо только в асинхронной функции, поэтому вам нужно обернуть его внутри асинхронной функции

 async function foo(){
    var users = await Users.findOne({key})

}