2016-08-05 3 views
0

Я использую nodejs с mondodb, но сталкиваюсь с странной ситуацией без каких-либо ошибок.Функция не называется post Обратный вызов

Я вызываю функцию updateUsers с обратным вызовом, но функция updateDashboard вообще не вызывает вызов даже при успешном завершении функции updateUsers. Кодовые блоки ниже. Об ошибках не сообщается.

   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

Итак, вы получаете журналы ошибок err и doc? –

+0

Да, бывает. Поток, как и ожидалось, когда err и doc печатаются после того, как функция Model.User.findByIdAndUpdate и обратный вызов (err, 1) запускаются, но updateDashboard не выполняется. –

+0

Итак, вы получаете анонимную функцию в строке 1 кода, который вы отправили, но 'updateDashboard' никогда не вызывается? или это то, что обратный вызов updateDashboard никогда не вызван? –

ответ

-1

Я думаю, что проблема спит в анонимной функции, вызываемой при первом updateUsers декларации. Если я угадал правильно, JavaScript посещает три объекта в качестве параметров для function updateUsers(req,dateKey,callback), и я думаю, что этот кусок кода:

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

не интерпретировано как объект. Поэтому он думает, что вы никогда не называете эту функцию. Еще раз, я только пытаюсь угадать, но я думаю, что проблема есть. Попробуйте инкапсулировать свою функцию в объект, а затем называть его? Что-то вроде:

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

Почему функция не должна интерпретироваться как функция? что бы это интерпретировалось? шляпа? скрепка? –

+0

Отредактировано, позвольте мне дышать, пожалуйста. –

+0

вы правы, хотя эта функция не будет интерпретироваться как объект, так как это функция –