我有一个函数可以对大图进行广度优先搜索。
目前该应用程序运行并在一段时间后完成。
我想向 EventEmitter 添加一个 finished
事件。
我的第一个想法是为每个 Recursive
进程实现一个计数器。
但如果某些 Recursive
进程不调用 counter--
方法,这可能会失败。
var App = function(start, cb) {
var Recursive = function(a, cb) {
// **asynchronous** and recursive breadth-first search
}
var eventEmitter = new EventEmitter();
cb(eventEmitter);
Recursive(start);
};
如果所有 Recursive
函数都已完成,我如何发出 finished
消息。
Edit App 不是在图中搜索任何东西,它必须遍历整个图才能完成。并且不知道图中有多少元素。
Edit2 像计算反射这样的东西会很完美,但它似乎不存在于 javascript 中。
图表非常不稳定,我正在执行一些嵌套的异步调用,但都可能失败。 有没有办法在不使用计数器的情况下知道所有异步递归调用何时完成?
最佳答案
JavaScript 是单线程的。
因此,除非 Recursive(start);
中有异步调用,如 setTimeout
或 ajax
,否则在调用后触发完成的事件是安全的递归函数。
一般异步 API 传递一个 done
函数。
所以你会有
Recursive(start, function() {
// trigger finished.
});
var Recursive = function(a, done) {
...
};
用户在完成时调用 done
是他们的职责。
关于javascript - 确定递归函数何时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5934161/