我有一个递归函数,它执行一种树形过程,其中每个调用可以多次调用自身,我无法知道它的深度或宽度。整个过程完成后如何运行回调?
我正在考虑使用某种对象来传递计数,但还没有完全破解它,我想知道是否有一种已知的最好/更好的方法。
答案 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中,但是递归应该有自己的计数,但这是有效的。 (我没有测试过这个例子)