Рекурсивный обратный вызов на основе каталога - Node.js - PullRequest
1 голос
/ 13 сентября 2011

У меня есть рекурсивная функция, которая выполняет своего рода древовидный процесс, где каждый вызов может вызывать себя несколько раз, у меня нет никакого способа узнать, насколько он глубокий или широкий. Как запустить обратный вызов после завершения всего процесса?

Я думаю о том, чтобы иметь какой-то объект, чтобы передать счет, но пока не совсем взломал его, мне интересно, есть ли известный лучший / лучший способ сделать это.

Ответы [ 2 ]

5 голосов
/ 13 сентября 2011

Вы можете сделать что-то вроде:

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

Вся ваша рекурсивная логика перейдет в функцию recurse, и обратный вызов будет вызван только после завершения всей рекурсии.

EDIT:

Вот простая реализация

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 голос
/ 04 апреля 2012

Мне нужно было подсчитать количество путей в каждом дереве перед обратным вызовом, например ::10000

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, но у рекурсии должен быть свой счет, однако это работает. (я не проверял этот пример)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...