Мне нужно, чтобы рекурсивная функция выполнялась асинхронно, с обратным вызовом, который происходит после того, как ревизия полностью завершена.Я упростил его, чтобы избавиться от не относящихся к делу частей (вот код в jsfiddle: http://jsfiddle.net/DgaBg/8/)
tree = {
"a": {
"b": 1,
"c": 2
},
"d": {
"e": {
"f": {
"g": 3
},
"h": 4,
"i": 5
},
"j": {
"k": 6,
"l": 7
},
"m": 8,
"n": 9
},
"o": {
"p": 10
},
"q": 11
};
Watcher = function() { };
Watcher.prototype.startDoingAsyncStuff = function(node, callback) {
var me = this,
key;
if(typeof node === "number") {
console.log(node);
} else {
for(key in node) {
if(node.hasOwnProperty(key)) {
(function(node) {
setTimeout(function() {
me.startDoingAsyncStuff(node, callback);
}, 500);
}(node[key]));
}
}
}
};
w = new Watcher();
w.startDoingAsyncStuff(tree, function() {
console.log("callback 1");
});
w.startDoingAsyncStuff(tree["d"], function() {
console.log("callback 2");
});
Мне нужен обратный вызов, предоставленный Watcher.startDoingAsyncStuff
для выполнения после завершения отказов, но яЯ не уверен, как этого добиться.
Сложный фактор заключается в том, что использование простого счетчика невозможно, поскольку Watcher.startDoingAsyncStuff
может быть выполнен несколько раз, не дожидаясь завершения предыдущих вызовов.
Любая помощь по этому вопросу будет принята с благодарностью.