【问题标题】:javascript recursive function callback how to identify when all function calls have endedjavascript递归函数回调如何识别所有函数调用何时结束
【发布时间】:2016-12-19 22:13:51
【问题描述】:
  function transverse(element, result) {
        if (angular.isArray(element)){
            element.forEach(function (item) {
                { transverse(item, result); }
            });
        }

        else if ( angular.isObject(element)) {
            var transform;

            if (element.hasOwnProperty("dataMetrics")) {
                console.log(element);

            }

            if (element.hasOwnProperty("childNodes")) {
                transverse(element.childNodes, result);
            }
        }
    }

所以我有一个用 javascript 编写的函数,它遍历树结构的 json 对象。但是我想添加一个回调,一旦该函数结束,它应该调用该方法。

如何做到这一点?

【问题讨论】:

  • 为什么需要回调?这都是同步的。您可以将if (callback) { callback(); } 添加到函数末尾(并使函数接受附加参数),但在这种情况下并没有增加任何好处。
  • 我可以在哪里添加那个块?
  • traverse(...); afterTraverse(); 会这样做。无需回调。

标签: javascript jquery recursion data-structures callback


【解决方案1】:

您发布的代码中没有任何内容是异步执行的,包括forEach 调用。

因此,您不需要回调。只需在初始调用 transverse 之后继续执行递归遍历之后的代码即可。

示例,展示forEach 的同步特性:

var input = [0, 1, 2, 3, 4];

input.forEach(function(item) {
  console.log(item);
});

console.log('done');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多