2016-01-12 3 views
0

У меня есть рекурсивная функция в некотором классе службы, чтобы удалить некоторые элементы 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

Благодарности

+1

removeScripts не возвращает обещание, поэтому вы не можете использовать. Then. вам может потребоваться использовать $ q для создания обещания https://docs.angularjs.org/api/ng/service/$q –

+2

@NitsanBaleli, Promise не требуется в операциях 'sync' ... – Rayon

ответ

4

Вы предполагающих removeScripts() возвращает обещание, это не так. removeScripts() - это синхронизация, поэтому просто добавляйте утверждения после этого.

-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.