javascript - 确定递归函数何时完成

标签 javascript reflection recursion node.js

我有一个函数可以对大图进行广度优先搜索。 目前该应用程序运行并在一段时间后完成。 我想向 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); 中有异步调用,如 setTimeoutajax,否则在调用后触发完成的事件是安全的递归函数。

一般异步 API 传递一个 done 函数。

所以你会有

Recursive(start, function() {
    // trigger finished.
});

var Recursive = function(a, done) {
    ...
};

用户在完成时调用 done 是他们的职责。

关于javascript - 确定递归函数何时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5934161/

相关文章:

java - 如何获取 Java 代理的调用处理程序?

Java 获取方法 "class not found"

javascript - 如何求一系列数字的最小公倍数?

javascript - 仅使用递归在 JavaScript 中打印带有单词字符的三 Angular 形

javascript - Vue.js - 如何正确监视嵌套数据

javascript - Internet Explorer 10 和 11 在输入聚焦时删除占位符文本

javascript - 根据动态选择选项值更改文本框值

javascript - Angular 6 外部 js、css 引用不起作用

java - Stackoverflow at Arrays.asList(str.split (",")) -> 由于错误的递归

java - 如何在 jar 文件上远程执行方法