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