2017-10-19 64 views
0

我正試圖調用一個函數,用於檢索集合中的所有文檔並返回數據。現在,一切正常,但由於某種原因,我得到了我的函數回調未定義的響應。我可能做錯了什麼?回調節點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"); 

}); 
+0

'...功能(ERR,項目){如果(ERR)返回回調(ERR)...'。 –

回答

1

我正在從我的回調函數未定義的響應。

回調的findImages纔會調用callback(s);

時返回一個參數,但在回調定義你登錄第二個參數。相反,只記錄第一個參數

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

我永遠不會像items.length一樣。因爲理由1我不在for循環中,所以它超出了範圍。 原因2,即使我在你的循環中,你的循環會給我一個items.length -1的最大值,因爲你使用了<。

您的解決方案:

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

     }); 


    }); 



};