我有一個遞歸函數,它執行一種樹進程,其中每個調用可能自己調用多次,我沒有任何方式知道它有多深或很多。整個流程完成後,如何運行回調?基於遞歸目錄的回調 - Node.js
我想有一些對象要通過計數,但還沒有完全破解它,我想知道是否有一個已知的最好/更好的方式做到這一點。
我有一個遞歸函數,它執行一種樹進程,其中每個調用可能自己調用多次,我沒有任何方式知道它有多深或很多。整個流程完成後,如何運行回調?基於遞歸目錄的回調 - Node.js
我想有一些對象要通過計數,但還沒有完全破解它,我想知道是否有一個已知的最好/更好的方式做到這一點。
什麼,我需要做的是計算在每個樹的路徑數調用回調如前:
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中,但遞歸應該有自己的計數,但是這是有效的。 (我沒有測試過這個例子)
你可以這樣做:
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'); });
你確定它會在所有遞歸完成後調用嗎?我原以爲它會被調用。 –
剛剛嘗試過,這將在所有遞歸完成之前調用回調函數。 –
在遞歸函數中是否存在某種異步調用?我只是嘗試了上面的簡單實現,並且它工作正常。我已將它添加到我的答案中。 – Sean