我是node.js的初学者,所以如果我的问题是愚蠢的,请原谅我。实际上,我试图从mongodb获得一些结果并打印出来,但我无法得到它们输出
代码:
MongoClient.connect(url,function(err,db){
if(err) throw err;
var list=()=>{
var arr=[]
var blQ={blocked_user:data.tag_search_mail}
db.collection("block_list").find(blQ,{"_id":0}).toArray((err,res)=>{
for(let i=0;i<res.length;i++){
arr.push(res[i]["blocker"])
}
});
return arr
}
var showList=(callback)=>{
callback()
}
console.log(showList(list))//It's giving undefined
// I wonder how can I print the returned array
建议后我尝试了什么:
var list = (callback) => {
var arr=[]
var blQ={blocked_user:data.tag_search_mail}
db.collection("block_list").find(blQ,{"_id":0}).toArray((err,res)=>{
for(let i=0;i<res.length;i++){
arr.push(res[i]["blocker"])
}
callback(arr);
});
}
list((arr) => {
console.log(arr);
})
答案 0 :(得分:2)
我建议你使用the node.js native interface for mongodb内置的promise接口,而不是手动回调。
如果你想将它放在一个函数中并在完成后回传结果并关闭数据库,那么你可以执行以下操作并从函数中返回一个调用者将使用的承诺。
update
答案 1 :(得分:0)
我建议使用Mongoose,一个与MongoDB平滑接口的Node模块。如果您感兴趣,请参阅以下文档:http://mongoosejs.com/
然而,要回答你的问题......
您的代码目前的问题是showList
函数实际上没有返回任何内容。这是你想要的:
var list = (callback) => {
// query mongodb here
callback(arr);
}
list((arr) => {
console.log(arr);
});
list
接受一个函数,最终在查询MongoDB时调用该函数。它将传入arr
对象。因此,当您稍后调用list
时,会传入一个接收arr
对象的函数,并调用console.log(arr)
来打印结果。祝你好运!
答案 2 :(得分:-1)
/index
输出::123(20)[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19]
尝试在调用回调函数之前添加一个return语句,并将list函数的return语句添加到数据库块中。这可能会解决您的问题。
var list =() => {
let arr =[];
for(let a =0 ; a< 20; a++)
arr.push(a);
return arr;
}
var show = (callback) => {
return callback()}
console.log("123",show(list));