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

Angularjs 在异步服务中避免多个$http.get,angularjs,Angularjs,我创建了一个通过$http.get()获取的服务 “我的服务”用于呈现多个ui元素的指令。该服务是异步的。它在指令代码中使用,比如:myService.getStuff(),它返回一个定制的承诺(从$http.get承诺的回调中) 但我希望我的服务在应用程序的生命周期内只执行一次对$http.get的调用。并缓存http.get响应 假设我在html中使用了两次指令。这就是我想要的:第一次调用它时(立即返回并通过$http.get获取内容)。第二次调用时,它检测到对$http.get的未完成调用

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

“我的服务”用于呈现多个ui元素的指令。该服务是异步的。它在指令代码中使用,比如:myService.getStuff(),它返回一个定制的承诺(从$http.get承诺的回调中)

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


假设我在html中使用了两次指令。这就是我想要的:第一次调用它时(立即返回并通过$http.get获取内容)。第二次调用时,它检测到对$http.get的未完成调用。因此,不会再次调用$http.get,而是以某种方式等待第一次调用的返回。

您可能需要使用
$http

return $http.get(/*...*/, { cache: true }).then(/*...*/);
或者只是把承诺藏在你的服务中

function MyService($http) {
   var promise;

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

如果您使用的是uirouter,另一种方法是将数据转换为父状态,并将解析后的数据注入到所有组件中

您可能需要使用
$http

return $http.get(/*...*/, { cache: true }).then(/*...*/);
或者只是把承诺藏在你的服务中

function MyService($http) {
   var promise;

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

如果您使用的是uirouter,另一种方法是将数据转换为父状态,并将解析后的数据注入到所有组件中

cache
设置为
true
如下:

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

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

缓存设置为
true
,如下所示:

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

对该函数的任何后续调用都将使用缓存的值。

函数中有一个虚假的额外
var
。它只需要是对外部
promise
变量的赋值。因此设置cache:true在我的情况下不起作用,因为我要避免调用$http.get(),无论它是否在内部缓存响应。但正如您所写,我的服务中的承诺可能更符合实际。这意味着我将多次返回相同的承诺,并在每次调用服务时为其设置不同的回调函数。这样可以吗?函数中有一个虚假的额外
var
。它只需要是对外部
promise
变量的赋值。因此设置cache:true在我的情况下不起作用,因为我要避免调用$http.get(),无论它是否在内部缓存响应。但正如您所写,我的服务中的承诺可能更符合实际。这意味着我将多次返回相同的承诺,并在每次调用服务时为其设置不同的回调函数。这样好吗?