函数未调用post callback

时间:2016-08-05 09:40:19

标签: javascript node.js callback

我正在使用带有mondodb的nodejs,但面临一个奇怪的情况,没有任何错误。

我使用回调调用updateUsers函数,但即使成功完成updateUsers函数,也根本没有调用updateDashboard函数。代码块如下。报告也没有错误。

                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;

1 个答案:

答案 0 :(得分:-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);