Lets say i want to run an if statment where the condition is async function.
const con = require('./con');
if(con.con('email@gmail.com')
console.log('User exists!')
else {
console.log('user does not exist?')
}
This is the function, it uses mongoose findOne which is an async task.
const User = require ('../nodeDB/models/user.js');
const con = function (email) {
User.findOne( { userEmail: email }, function (err, doc) {
if(err) {
console.log(err);
}
if (doc) {
return false;
} else {
return true;
}
});
}
module.exports.con = con;
The problem is that the if statment gets called before the con can get executed which then does’nt set the condition.
Advertisement
Answer
You can do it this way :
const con = userEmail => User.findOne({userEmail}).lean().exec();
(async () => {
if (await con('email@gmail.com')) {
console.log('User exists!')
} else {
console.log('user does not exist?')
}
})()
- Return
User.findOnefrom your function.
(optional) 2. Add it .lean() (returns simple JSON, faster)
(optional) 3. Add it .exec() so it returns a true Promise and not just a thenable
- now you can simply
await con()anywhere inside anasyncfunction, just as if it was synchronous.