将http.get respone保存在服务变量中

时间:2017-02-24 00:19:26

标签: javascript angularjs http

想象一下,在初始化时你有一个带有http.get请求的工厂,如下所示:

app.factory('myService', function($http) {
   var someArray = [];

   $http.get('someUrl').then(function(response) {
        someArray = response.data; /* this does not work */
   }

   getSomeArray = function() {
       return someArray;
   }

   return {
      getSomeArray:getSomeArray
   }
}

您如何以正确的方式保存respone.data?

我想知道的原因是我假设服务在控制器之前被初始化,因此向控制器发送一个承诺将导致回调服务以保存变量,需要额外的调用

1 个答案:

答案 0 :(得分:1)

据我所知(并在文档中看到),无法异步初始化工厂。因此,在通过外部呼叫getSomeArray()实际使用之前,无法保证您的响应会保存到本地变量。

你绝对应该使用Promise:只需触发请求并保存承诺:

app.factory('myService', function ($http) {

   var responsePromise = $http.get('someUrl').then(function (response) {
       return response.data;
   }

   return {
       getSomeArray: getSomeArray
   }


   function getSomeArray () {
       return responsePromise;
   }
}
myService.getSomeArray().then(function (someArray) {
    // ...
});