我正在尝试使用函数从数据库中获取结果,但它显示未定义但是当我打印结果时,它正在打印相同的方法..我知道节点js在异步中执行的原因但我不知道如何克服这个问题
var mongo=require('../routes/mongo')
exports.search=function(userid){
// console.log(userid)
mongo.get().collection("customers").find({"userid":userid}).toArray(function(err, result) {
if (err) throw err;
// console.log(result)
return result;
});
}
当我在其他模块中打印时,它打印未定义
它尝试使用此console.log(dboperations.search(req.body.userid))
答案 0 :(得分:1)
因为执行数据库操作是异步的,所以无法将结果作为同步。你可以使用回调。
var mongo=require('../routes/mongo')
exports.search=function(userid, callback){
// console.log(userid)
mongo.get().collection("customers").find({"userid":userid}).toArray(function(err, result) {
if (err) throw err;
// console.log(result)
callback(result)
});
}
然后调用函数
dboperations.search('id of the user', function (result) {
console.log(result)
})
关于异步编程的一篇很好的文章https://blog.risingstack.com/node-hero-async-programming-in-node-js/