2016-08-31 5 views
0

Ich habe eine mongojs Abfrage wie:Asynchroner Aufruf von mongojs finden Funktion

db.mapping.find(
    { "provider":req.params.provider, "perId":mongojs.ObjectId(req.params.perId) }, 
    function(err, que){ 
     if(err) 
      res.send(err); 
     else if(que) 
     { 
      totalVideoList = []; 

      for (var i=0; i < que.length; i++) 
      { 
       myid = que[i].providerId; 

       db.ABC.find({}, function(err, que1){ 
        if(err) 
         res.send(err); 

        var x = {}; 
        for (var j=0; j < que1.length; j++) 
        { 
         searching(que1[j]); 
        } 

        videoList = []; 
        getVideo(requiredDocument); 

        totalVideoList = totalVideoList.concat(videoList); 

       }); 
      } 
      res.json(totalVideoList); 

     } 
     else 
      res.json([]); 
    }); 

Zur Zeit habe ich immer bin immer [] (leeres Array) als meine Antwort. Das Problem liegt an der asynchronen Natur der Rückruffunktion von Mongojs. Bevor die erwartete Ausgabe in der Variable "totalVideoList" eintrifft, antwortet sie mit totalVideoList = []. Ich weiß nicht, wie async.each() hier zu verwenden ist. Bitte helfen Sie mir, dieses Problem anzugehen.

Antwort

1

Unter der Annahme, async

db.mapping.find(
    { "provider":req.params.provider, "perId":mongojs.ObjectId(req.params.perId) }, 
    function(err, que){ 
     if(err) 
      res.send(err); 
     else if(que) 
     { 
      totalVideoList = []; 

      async.each(que, function(item, callback){ 
       myid = item.providerId; 

       db.ABC.find({}, function(err, item){ 
        if(err) 
         return callback(err); 

        var x = {}; 
        for (var j=0; j < item.length; j++) 
        { 
         searching(item[j]); 
        } 

        videoList = []; 
        getVideo(requiredDocument); 

        totalVideoList = totalVideoList.concat(videoList); 
        callback(null); 

       }); 
      }, function(asyncErr){ 
       if(asyncErr) 
       return resp.json(asyncErr); 
       resp.json(totalVideoList); 
      });    
     } 
     else 
      res.json([]); 
    }); 
+0

Sir verwenden, das funktioniert nicht so gut. –

+0

Ich bekomme das Ergebnis des ersten Elements der äußeren Abfrage in totalVideoList wiederholt. Ich denke, das liegt daran, dass Sie res.json (totalVideoList) innerhalb der async.each() -Funktion platziert haben. Aber als ich es außerhalb davon platziert habe, gibt es wieder leere Arrays zurück. –

+0

@AmandeepSachan Sind Sie sicher, dass Sie meinem Beispielcode folgen? Ich sende Json, wenn alle asynchronen Funktionen getan –

Verwandte Themen