2016-08-05 14 views
0

Ich benutze nodejs mit mondodb aber mit einer seltsamen Situation ohne Fehler konfrontiert.Funktion nicht aufgerufen nach Rückruf

Ich rufe die Funktion updateUsers mit dem Rückruf, aber die Funktion updateDashboard wird überhaupt nicht aufgerufen, auch wenn die Funktion updateUsers erfolgreich beendet wurde. Die Codeblöcke sind unten. Es werden auch keine Fehler gemeldet.

   updateUsers(data,dashboardDayData.key,function(err,doc){ 

         updateDashboard(dashboardYearData,data.type,1,doc,function(err){console.log("Got executed");}); 

       }); 


function updateUsers(req,dateKey,callback){ 
     var yyyy  = parseInt(dateKey.toString().substring(0,4)); 
     var mm   = parseInt(dateKey.toString().substring(4,6)); 
     var dd   = dateKey.toString().substring(6,8); 
     switch(req.type){ 
       case Collection["begin"]: 
         Model.User.findById(req.val.did,function(err,doc){ 
           if(!err){ 
             if(doc === null || !doc){ 
               req.type = Collection["user"]; 
               req.val.ts = 1; 
               req.val.tts = 0; 
               event = EventFactory.getEvent(req); 
               event.save(function (err) { 
                 if (err) { 
                   logger.error(common.getErrorMessageFrom(err)); 
                   return; 
                 } 
                 var push = {}; 
                 push['_'+yyyy] = JSON.parse('{"_id":'+parseInt(mm.toString().concat(dd))+',"tse":1,"tts":0}'); 
                 Model.User.findByIdAndUpdate(req.val.did,{$push:push},{upsert:true},function(err,doc){ 
                   console.log("err "+err); 
                   console.log("doc "+doc); 
                   if(err){ 
                     logger.error(common.getErrorMessageFrom(err)); 
                     return; 
                   } 

                                   callback(err,1); 
                 }); 
               }); 

}

function updateDashboard(dashboardData,eventType,valueIncrement,newUserIncrement,callback){ 
     switch(eventType){ 
       case Collection["begin"]: 
         console.log(dashboardData); 
         Model.Dashboard.findByIdAndUpdate(dashboardData,{$inc:{'val.tse':valueIncrement,'val.tnu':newUserIncrement}},{upsert:true},function(err,doc){ 
           if(err){ 
             logger.error(err); 
           } 
         callback(err); 
         }); 
         break; 
+0

so, erhalten Sie die Err und Doc-Konsole Protokolle passieren? –

+0

Ja, es passiert. Der Ablauf ist wie erwartet, wobei err und doc nach der Funktion Model.User.findByIdAndUpdate gedruckt werden und der Callback (err, 1) wird ausgeführt, aber das updateDashboard wird nicht ausgeführt. –

+0

Sie gelangen also zur anonymen Funktion in Zeile 1 des von Ihnen geposteten Codes, aber 'updateDashboard' wird nie aufgerufen? Oder wird der Callback von updateDashboard nie aufgerufen? –

Antwort

-1

Ich denke, das Problem in der anonymen Funktion schläft bei Ihrer ersten updateUsers Erklärung genannt. Wenn ich vermute, rechts, besucht JavaScript drei Objekte als Parameter für Ihre function updateUsers(req,dateKey,callback), und ich denke, dieses Stück Code:

function(err,doc){ 
    updateDashboard(dashboardYearData,data.type,1,doc,function(err) {console.log("Got executed");}); 
} 

wird nicht als Objekt interpretiert. Also denkt er, dass du diese Funktion nie nennst. Noch einmal, ich versuche nur zu erraten, aber ich denke, das Problem ist da. Versuchen Sie, Ihre Funktion in einem Objekt zu kapseln und dann aufzurufen? Somethink wie:

var subfunction = function(err, doc) { updateDashboard (...) }; 
updateUsers(req, database, subfunction); 
+0

Warum sollte die Funktion nicht als Funktion interpretiert werden? Was würde es als interpretiert werden? ein Hut? eine Büroklammer? –

+0

Bearbeitet, lass mich bitte atmen. –

+0

Sie haben jedoch Recht, diese Funktion würde nicht als Objekt interpretiert werden, da es eine Funktion ist –

Verwandte Themen