我是node.js中的完整初学者,所以请原谅我,如果我的问题是愚蠢的。要获得所需的输出。
代码:
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);
})
而不是手动回调,我建议您使用node.js本机界面中内置的Promise接口。
如果您想将其放入功能中并将结果传达并在完成后关闭DB,则可以执行以下操作并从函数中返回呼叫的承诺。
function getBlocked(data) {
let openDb;
close() {
if (openDb) {
openDb.close().catch(err => {
console.log("Error closing db: ", err);
})
}
}
return MongoClient.connect(url).then(db => {
openDb = db;
const blQ = {blocked_user:data.tag_search_mail};
return db.collection("block_list").find(blQ,{"_id":0}).toArray();
}).then(results => {
let blocked = results.map(item => item.blocker);
close();
return blocked; // make this the resolved value of the promise
}).catch(err => {
close();
throw err; // rethrow to keep the promise rejected
})
}
// usage
getBlocked(data).then(blocked => {
// use blocked array here
}).catch(err => {
// handle error here
});
我建议使用Mongoose,该节点模块与MongoDB平稳接口。如果您是兴趣,则是文档: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)
以打印结果。祝你好运!
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));
输出::123(20([0,1,2,3,4,5,6,6,7,7,8,9,11,11,11,12,12,13,14,14,15,1516、17、18、19]
尝试在调用回调函数之前添加返回语句,然后将列表函数的返回语句添加到数据库块中。这可能会解决您的问题。
MongoClient.connect(url,function(err,db){
if(err) throw err;
var list=(done)=>{
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"])
}
if(err) done(err);
else done(null,arr);
});
}
var showList=(callback)=>{
callback((err, result) => {
if(err) console.log(err);
else console.log(result):
})
}
showList(list);