gpt4 book ai didi

javascript - Node.js 模块不会返回对象,但会返回 console.log

转载 作者:行者123 更新时间:2023-12-02 17:05:51 26 4
gpt4 key购买 nike

我有一个在 mongodb 中搜索文档的模块。当我调用 check_permitions (带有参数)时,我从函数中得到“未定义”返回,但 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');
};

这是关于 Node 中异步概念的教程:http://lostechies.com/johnteague/2012/11/30/node-js-must-know-concepts-asynchrounous/

<小时/>

编辑:您必须传入回调。

您的调用代码可能如下所示:

var result = check_permitions(some_user_id);
// do something with result

您需要将其更新为:

check_permitions(some_user_id, function(err, result) {
// do something with result
})

我建议您了解有关异步 JavaScript 代码的更多信息。它并不总是像您期望的那样自上而下执行。回调的要点是,在数据库结果返回之后,将来在某个任意点将调用它,此时外部调用代码已经完成执行。

关于javascript - Node.js 模块不会返回对象,但会返回 console.log,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25267313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com