实现node.js回调以获得结果

时间:2018-03-31 17:24:23

标签: node.js callback

我是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);
            })

3 个答案:

答案 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));