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

Function call after recursive function returns

本文关键字:函数调用 返回 递归函数      更新时间:2023-09-26

我在一些服务类中有一个递归函数来删除一些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

感谢

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

您可以尝试:

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;
}

您需要使用递延API。