基于递归目录的回调 - Node.js

时间:2011-09-13 17:25:47

标签: javascript mongodb node.js recursion

我有一个递归函数,它执行一种树形过程,其中每个调用可以多次调用自身,我无法知道它的深度或宽度。整个过程完成后如何运行回调?

我正在考虑使用某种对象来传递计数,但还没有完全破解它,我想知道是否有一种已知的最好/更好的方法。

2 个答案:

答案 0 :(得分:5)

您可以执行以下操作:

function recurseTree(arg, callback) {
    var recurse = function(a) {
        if (someCondition) {
            recurse(a);
        }
    };
    recurse(arg);
    callback();
}

所有实际递归逻辑都将进入recurse函数,并且只有在所有递归完成后才会调用回调。

编辑:

这是一个简单的实现

function recursiveAlert(x, callback) {
    var recurse = function(y) {
        alert(y);
        if (y < 3) {
            recurse(y + 1);
        }
    }
    recurse(x);
    callback();
}

recursiveAlert(0, function() { alert('done'); });

答案 1 :(得分:1)

我需要做的是在调用回调之前计算每棵树中的路径数量,例如:

myFunction: function(tree) {
  var count = 0;
  finishCallback = function() {
    if (--count === 0){
       callback();
    };
  };

  recursion = function(subTree) {
    count = tree.paths.length;

    _.each(subTree.path, function(route) {
      count += subFolder.fileRefs.length;
      recursion(route, function() {
        finishCallback();
      });
    });
  };

  recursion(tree);
}

也许计数不应该在myFunction中,但是递归应该有自己的计数,但这是有效的。 (我没有测试过这个例子)