避免在异步服务中使用多个$ http.get

时间:2016-07-05 12:09:56

标签: angularjs

我已经创建了一个通过$ http.get()获取的服务。

我的服务用于呈现几个ui元素的指令。该服务是异步的。它在指令代码中使用,如:myService.getStuff(),它返回一个自定义的promise(来自$ http.get promise的回调中)。

但我希望我的服务只在应用程序的生命周期内对$ http.get执行一次调用。并缓存http.get响应。

所以说我在我的html中使用指令2次。这就是我想要的:第一次调用它(立即返回并通过$ http.get获取内容)。它第二次调用时会检测到对$ http.get的未完成调用。因此不会再对$ http.get进行调用,但不知何故等待第一次调用的返回。

2 个答案:

答案 0 :(得分:2)

您可能希望使用$http

的内部cache
return $http.get(/*...*/, { cache: true }).then(/*...*/);

或者只是在您的服务中缓存承诺。

function MyService($http) {
   var promise;

   this.get = function() {
      promise = promise || $http.get(/*...*/).then(/*...*/);
      return promise;
   }
}

如果您正在使用uirouter,另一种方法是resolve处于父状态的数据,并将已解析的数据注入所有组件。

答案 1 :(得分:0)

cache设置为true,如下所示:

$http.get(yourUrl, {cache: true})
    .then(...)

对此的任何后续调用都将使用缓存值。