Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数未在回调后调用_Javascript_Node.js_Callback - Fatal编程技术网

Javascript 函数未在回调后调用

Javascript 函数未在回调后调用,javascript,node.js,callback,Javascript,Node.js,Callback,我将nodejs与mondodb一起使用,但是面对一个没有任何错误的奇怪情况 我通过回调调用updateUsers函数,但是updateDashboard函数根本不会被调用,即使在updateUsers函数成功完成时也是如此。下面是代码块。也没有报告任何错误 updateUsers(data,dashboardDayData.key,function(err,doc){ updateDashboard(dashbo

我将nodejs与mondodb一起使用,但是面对一个没有任何错误的奇怪情况

我通过回调调用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);
                                                        });
                                                });
}


我认为问题在于第一次
updateUsers
声明时调用的匿名函数。如果我猜对了,JavaScript会将三个对象作为
函数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);

那么,您得到了err和doc控制台日志吗?是的,它发生了。正如预期的那样,当Model.User.findByIdAndUpdate函数和回调函数(err,1)执行后,会打印err和doc,但updateDashboard不会执行。因此,您可以在发布的代码的第1行中使用匿名函数,但
updateDashboard
从未被调用?还是updateDashboard的回调从未被调用?@Vaibs:对不起,我不明白你的查询。请详细说明,我将提供细节。@Jaromanda X:这两种情况都没有发生。我在updateDashboard函数中添加了console.log(“Inside dashboard”),但即使这样也没有显示。为什么该函数不能被解释为函数?这将被解释为什么?帽子?一个回形针?编辑好了,请让我呼吸一下。你说得对,那个函数不会被解释为对象,因为它是一个function@Yassine:您刚刚将其移动到非匿名函数。对的我会尝试,但仍然不理解为什么它没有被执行。这是正确的,它没有解决问题,嗯。。。如果您有时间,试着发布一个JSFiddle或其他东西,这样我们也可以进行实验。
var subfunction = function(err, doc) { updateDashboard (...) };
updateUsers(req, database, subfunction);