Angularjs 在异步服务中避免多个$http.get
我创建了一个通过$http.get()获取的服务 “我的服务”用于呈现多个ui元素的指令。该服务是异步的。它在指令代码中使用,比如:myService.getStuff(),它返回一个定制的承诺(从$http.get承诺的回调中) 但我希望我的服务在应用程序的生命周期内只执行一次对$http.get的调用。并缓存http.get响应Angularjs 在异步服务中避免多个$http.get,angularjs,Angularjs,我创建了一个通过$http.get()获取的服务 “我的服务”用于呈现多个ui元素的指令。该服务是异步的。它在指令代码中使用,比如:myService.getStuff(),它返回一个定制的承诺(从$http.get承诺的回调中) 但我希望我的服务在应用程序的生命周期内只执行一次对$http.get的调用。并缓存http.get响应 假设我在html中使用了两次指令。这就是我想要的:第一次调用它时(立即返回并通过$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(),无论它是否在内部缓存响应。但正如您所写,我的服务中的承诺可能更符合实际。这意味着我将多次返回相同的承诺,并在每次调用服务时为其设置不同的回调函数。这样好吗?