Javascript 设置本地变量作为工厂中Ajax调用的结果

Javascript 设置本地变量作为工厂中Ajax调用的结果,javascript,angularjs,factory,Javascript,Angularjs,Factory,我试图创建一个工厂,将AJAX调用的结果存储在一个变量中。到目前为止,我有以下几点: angular.module('frontApp') .factory('myFactory', function(Restangular) { var myFactory = function() { this.loadedData = []; loadData() } var loadData =

我试图创建一个工厂,将AJAX调用的结果存储在一个变量中。到目前为止,我有以下几点:

angular.module('frontApp')
    .factory('myFactory', function(Restangular) {
        var myFactory = function() {
            this.loadedData = [];
            loadData()
        }   

        var loadData = function() {
            Restangular.all('endPoint').customGET('path/run').then(
                function(success) {
                    this.loadedData = success.results;
                }
            );
        }

        return stoppingPatternFactory;
    });
但我得到一个错误:
无法设置未定义的属性'loadedData'。

我知道此上下文中的
this
关键字指的是函数上下文,这就是我得到错误的原因。问题是,当重新启动的调用是异步的时,我无法理解如何在第一个函数中设置
this.loadedData
。我尝试在第一个函数中发出请求,并尝试在回调中设置变量,但我得到了相同的错误


编辑:我可能应该补充一点,我正在尝试创建此工厂的多个实例,例如,
var f=new myFactory()
,以便指令的每个实例都有自己的关联工厂。

我相信您正在寻找的是“调用”或“应用”。它允许您在设置方法的“this”引用时调用该方法。然后可以保存该引用并在任意位置设置其属性。这样的办法应该行得通

angular.module('frontApp')
.factory('myFactory', function(Restangular) {
    var myFactory = function() {
        this.loadedData = [];
        loadData.call(this);
    }   

    var loadData = function() {
        var self = this;
        Restangular.all('endPoint').customGET('path/run').then(
            function(success) {
                self.loadedData = success.results;
            }
        );
    }

    return myFactory;
});

您需要在回调中设置loadedData

angular.module('frontApp')
.factory('myFactory', function(Restangular) {

    var myFactory = function() {
        var self = this;
        self.loadedData = [];
        loadData().then(function(data){
            self.loadedData =  data;
        })
    }   

    var loadData = function() {
        var restApi = Restangular.all('endPoint')
        return restApi.customGET('path/run').then(
            function(success) {
                return success.results;
            }
        );
    }

    return stoppingPatternFactory;
});

在工厂中使用“this”是错误的。检查这篇文章是否正确使用:嗯-我只是简单地看了一下,但似乎他们正在为工厂设置全局变量,这些变量将可用于工厂的所有实例,我需要只可用于每个实例的变量。工厂和服务是单例的-它们是全局的。但是您可以实现一个getInstance(),它在每次调用新对象时都返回一个新对象。