2011-09-13 60 views
1

我有一個遞歸函數,它執行一種樹進程,其中每個調用可能自己調用​​多次,我沒有任何方式知道它有多深或很多。整個流程完成後,如何運行回調?基於遞歸目錄的回調 - Node.js

我想有一些對象要通過計數,但還沒有完全破解它,我想知道是否有一個已知的最好/更好的方式做到這一點。

回答

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中,但遞歸應該有自己的計數,但是這是有效的。 (我沒有測試過這個例子)

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'); }); 
+0

你確定它會在所有遞歸完成後調用嗎?我原以爲它會被調用。 –

+0

剛剛嘗試過,這將在所有遞歸完成之前調用回調函數。 –

+0

在遞歸函數中是否存在某種異步調用?我只是嘗試了上面的簡單實現,並且它工作正常。我已將它添加到我的答案中。 – Sean