Javascript 在同一工厂内调用工厂函数

Javascript 在同一工厂内调用工厂函数,javascript,angularjs,Javascript,Angularjs,在我的控制器中,我调用一个需要递归调用自身的工厂函数。这些代码在它们只是工厂中没有定义的简单javascript函数时就可以工作了,但我正在尝试更好地隔离它们 这是控制器中的代码片段的外观: myApp.controller('VisionCtrl', ['$scope', 'AppFactory', function ($scope, AppFactory,) { var promiseTaxo; promiseTaxo = AppFactory.getTaxonomy("vi

在我的控制器中,我调用一个需要递归调用自身的工厂函数。这些代码在它们只是工厂中没有定义的简单javascript函数时就可以工作了,但我正在尝试更好地隔离它们

这是控制器中的代码片段的外观:

myApp.controller('VisionCtrl', ['$scope', 'AppFactory', function ($scope, AppFactory,) {
    var promiseTaxo;
    promiseTaxo = AppFactory.getTaxonomy("vision3", "Vision Type");
}])
在工厂模块中:

myApp.factory('AppFactory', ['$http', '$q', function($http, $q, TaxoFactory) {
    return {
        getTaxonomy: function(group, termSet) {
            ... lots of code ....
            if (termSet.length > 0) { getTaxonomy(group, childTermSet) }
        }
    }
}])
这是超级简化的,但其思想是,在getTaxonomy函数中,如果我找到子节点,我会递归地调用自己。在我处理处理过程和承诺的异步性质时,还有很多事情要做,但是当我把这段代码放在工厂之外时,它工作得很好


我只是不知道如何在getTaxonomy中调用getTaxonomy

您可以调用@elclans提到的
this.getTaxonomy()
,或者稍微更改一下您的工厂,以便从内部调用它:

myApp.factory('AppFactory', ['$http', '$q', function($http, $q, TaxoFactory) {

    var AppFactory = {
        getTaxonomy: function(group, termSet) {
            ... lots of code ....
            if (termSet.length > 0) { AppFactory.getTaxonomy(group, childTermSet) }
        }
    }

    return AppFactory;
}]);

未定义
getTaxonomy
,请尝试
this.getTaxonomy
。或者先定义对象,然后使用
obj.getTaxonomy
并在末尾使用
returnobj
。或者给你的函数一个用于递归的名称。定义包含所有函数的内部对象完成了这项工作-谢谢,注意这个.getTaxonomy()不起作用-未定义,我不明白为什么,可能与注入器的工作方式有关。