Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js模块赢得';t返回对象,但不返回cosole.log_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript Node.js模块赢得';t返回对象,但不返回cosole.log

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

我有一个模块可以搜索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).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不是函数谢谢!!现在我对异步概念有了更多的了解!