回调节点js中的未定义响应?

时间:2017-10-19 09:46:30

标签: javascript node.js

我正在尝试调用一个函数,该函数从集合中检索所有文档并返回数据。现在,一切正常,但由于某种原因,我从函数回调中得到一个未定义的响应。我能做错什么?

var findImages = function(db, callback) {
    var s ="";
    db.collection('imageinfo', function(err, collection) {
        collection.find().toArray(function(err, items) {

            for(var i=0;i<items.length;i++){
                console.log("imagename",items[i].imagename);
                s =s + items[i].imagename+",";

            }

            if(i==items.length){
                callback(s);

            }
        });


    });



};


app.get("/fetchrecords",function(req,res){
    console.log("entered");
    findImages(db,function(req,res){
     console.log("res",res);
    });

    res.end("Sent records");

});

2 个答案:

答案 0 :(得分:1)

  

我从函数回调中得到一个未定义的响应。

findImages

回调仅在调用时返回一个参数callback(s);

但是在你的回调定义中你记录了第二个参数。相反,只记录第一个参数

findImages(db,function(res){
 console.log("res",res);
});

答案 1 :(得分:0)

我将永远不会与items.length相同。因为原因1我不在你的for循环中,所以它超出了范围。 原因2,即使我在你的循环中,你的循环也会给我一个items.length -1的最大值,因为你使用&lt;。

您的解决方案:

var findImages = function(db, callback) {
    var s ="";
    db.collection('imageinfo', function(err, collection) {
        collection.find().toArray(function(err, items) {
           var i = 0;
            while( i<items.length){
                console.log("imagename",items[i].imagename);
                s =s + items[i].imagename+",";
                i++;
            }
              callback(s);

        });


    });



};