递归函数返回后的函数调用

时间:2016-01-12 10:18:26

标签: javascript angularjs recursion

我在某个服务类中有一个递归函数来删除一些json元素,一旦它们被删除,我必须调用为更新注册的回调。

我的代码 -

    var trimTree = function(){
    removeScripts(tree.children).then(function(){
      angular.forEach(callbacks, function(callback){
        //console.log(callback);
        console.log("Calling callbacks");
        callback();
      });
    });
  }
  function removeScripts(nodes){
    for(i=0;i<nodes.length;i++){
      if(nodes[i].type == 'script'){
        return nodes.splice(i, 1);
      }else{
        return removeScripts(nodes[i]);
      }
    }
  }

但它给我的错误为TypeError: Cannot read property 'then' of undefined

由于

2 个答案:

答案 0 :(得分:4)

您假设removeScripts()返回Promise,但事实并非如此。 removeScripts()是同步的,所以只需在正常情况下添加语句。

答案 1 :(得分:-1)

您可以尝试:

function removeScripts(nodes){
  var deferred = $q.defer();
  for(i=0;i<nodes.length;i++){
    if(nodes[i].type == 'script'){
      deferred.resolve(nodes.splice(i, 1));
    }else{
      deferred.reject(removeScripts(nodes[i]));
    }
  }
  return deferred.promise;
}

您需要使用Deferred API