2017-10-19 5 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

私は、関数コールバックから未定義の応答を取得しています。

callback(s);を呼び出したとき

コールバックfindImagesは、パラメータを1つだけ返します。しかし、あなたのコールバックの定義では、第二引数をログに記録します。代わりに、私はitems.lengthと同じになることはありません

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

を最初の引数だけをログに記録します。理由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); 

     }); 


    }); 



}; 
関連する問題