我正在使用带有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;
答案 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);