Porque
findOne
é assíncrono função, uma maneira de retornar é através de callback
função module.exports.isAdmin = function(user_id, callback) {
var params = {'roles': 'admin'};
dao.findOne(params, function(err, user) {
if (err) {
logger.error(err);
callback && callback(false);
}
if (_.indexOf(user.roles, 'admin') != -1) {
logger.info("admin user: " + user._id);
if (user._id == user_id)
callback && callback(true);
}
callback && callback(true);
});
};
isAdmin(userId, function(v) {
console.log(v);
})
Outra maneira é obter Promise em
findOne
, como este documento disse, .exec()
dá-lhe uma promessa de pleno direito. Mesmo com Promise
, para atender a sua necessidade, o resultado pode ser retornado por meio da função de retorno de chamada. module.exports.isAdmin = function(user_id, callback) {
var params = {'roles': 'admin'};
var queryPromise = dao.findOne(params).exec();
queryPromise.then(function(user) {
if (_.indexOf(user.roles, 'admin') != -1) {
logger.info("admin user: " + user._id);
if (user._id == user_id)
callback && callback(true);
}
}, function(err) {
callback && callback(false);
});
};