Javascript Node.js模块赢得';t返回对象,但不返回cosole.log
我有一个模块可以搜索mongodb中的文档。 调用Javascript Node.js模块赢得';t返回对象,但不返回cosole.log,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有一个模块可以搜索mongodb中的文档。 调用check\u permissions(带参数)时,函数返回“undefined”,但console.log(rslts[0].faq)返回正确的对象。有什么问题 var iapp = require('./app'); exports.check_permitions = function(user_id) { iapp.website_coll.find({}).where('admins_id').equals(user_id).ex
check\u permissions
(带参数)时,函数返回“undefined”,但console.log(rslts[0].faq)
返回正确的对象。有什么问题
var iapp = require('./app');
exports.check_permitions = function(user_id) {
iapp.website_coll.find({}).where('admins_id').equals(user_id).exec(function(err, rslts) {
if (err) {
console.log(err);
} else if (rslts) {
console.log(rslts[0].faq);
return (rslts[0].faq);
} else if (!rslts) {
console.log('no r');
return (rslts[0].faq);
}
});
console.log('top');
};
问题是这里的调用是异步的。您需要传入一个回调,然后使用返回值调用该回调 更新示例:
exports.check_permitions = function (user_id, callback) {
iapp.website_coll.find({}).where('admins_id').equals(user_id).exec(function(err, rslts) {
if (err) {
console.log(err);
callback(err);
}
else if (rslts) {
console.log(rslts[0].faq);
callback(null, rslts[0].faq);
}
else if (!rslts) {
console.log('no r');
callback(null, null);
}
});
console.log('top');
};
以下是关于节点中异步概念的教程:
编辑: 您必须传入回调 您的呼叫代码可能如下所示:
var result = check_permitions(some_user_id);
// do something with result
您需要将其更新为:
check_permitions(some_user_id, function(err, result) {
// do something with result
})
我建议学习更多关于异步javascript代码的知识。它并不总是像您期望的那样自顶向下执行。回调的要点是,在数据库结果返回后,它将在将来的某个任意点被调用,此时外部调用代码已经完成了执行。可能与First重复,这是一个异步函数,因此它不会在需要时准确返回。其次,您是从回调返回,而不是从主函数返回。调用(到
控制台.log
)不是返回。还有!它给了我一个错误:回调(null,rslts[0].faq);TypeError:undefined不是函数谢谢!!现在我对异步概念有了更多的了解!