2017-10-19 1 views
0

Ich versuche, eine Funktion aufzurufen, die das gesamte Dokument aus einer Sammlung abruft und die Daten zurückgibt. Jetzt funktioniert alles gut, aber aus irgendeinem Grund bekomme ich eine undefinierte Antwort von meinem Funktionsrückruf. Was könnte ich falsch machen?Nicht definierte Antwort im Callback-Knoten 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

'... Funktion (err, Artikel) {if (err) return Rückruf (err) ...'. –

Antwort

1

Ich bin eine undefinierte Antwort von meiner Callback-Funktion bekommen.

Rückruf von findImages gibt nur einen Parameter, wenn callback(s); aufgerufen

Aber in Ihrer Callback-Definition Sie zweites Argument anzumelden. Stattdessen melden Sie sich nur das erste Argument

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

ich werde nie das gleiche wie items.length sein. Weil Grund 1 i nicht in Ihrer for-Schleife ist, ist es außerhalb des Bereichs. Grund 2, auch wenn ich in Ihrer Schleife ist, wird Ihre Schleife geben Sie einen maximalen Wert von items.length -1, weil Sie < verwenden.

Ihre Lösung:

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

     }); 


    }); 



};