async.js:forEachOf没有调用最后一个回调

时间:2015-12-10 14:52:53

标签: javascript node.js asynchronous async.js

我已检查过该主题的所有帖子,并在迭代器中添加了一个回调。 但是,它似乎不起作用。

  async.forEachOf(scoreTree.nodes, function (node,key, callback){
          if(!node.composition.weights){
            mongooseCall.etc.find({}
            }
            ,function (err, data) {
              //some synchronous code
              //use data to update node... 
              callback(null);
            });
          }
       },function (err) {
         lastCall(err, scoreTree, function () {scoreTree.save();});
       });

感谢您的帮助! 马鲁万。

2 个答案:

答案 0 :(得分:0)

开发者控制台是您的朋友,并会向您显示代码可能出现的错误 - 看起来您的{太多mongooseCall.etc.find({}

试试这样:

async.forEachOf(scoreTree.nodes, function (node,key, callback){
          if(!node.composition.weights){
            mongooseCall.etc.find({}
            // } <- This is the one too many
            ,function (err, data) {
              //some synchronous code
              //use data to update node... 
              callback(null);
            });
          }
       },function (err) {
         lastCall(err, scoreTree, function () {scoreTree.save();});
       });

答案 1 :(得分:0)

实际上,我在mongodb的调用中删除了一些代码,我忘了一个}。 这里的主要问题是没有为所有节点调用“回调”。 添加else,修复问题。

async.forEachOf(scoreTree.nodes, function (node,key, callback){
          if(!node.composition.weights){
            mongooseCall.etc.find({}
            // } <- This is the one too many 
            ,function (err, data) {
              //some synchronous code
              //use data to update node... 
              callback(null); //not called in all the cases
            });
          }else{
              //this needs to be added
              callback(null);
          }
       },function (err) {
         lastCall(err, scoreTree, function () {scoreTree.save();});
       });