Bởi vì findOne
là không đồng bộ , một cách để trả về từ nó là thông qua callback
chức năng
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);
})
Một cách khác là tải Promise trong findOne
, như tài liệu này đã nói, .exec()
cung cấp cho bạn một lời hứa đầy đủ chính thức. Ngay cả với Promise
, để đáp ứng yêu cầu của bạn, kết quả có thể được trả về thông qua hàm gọi lại.
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);
});
};