在angularjs中承诺有点问题。 我的承诺'得到缓存',意味着他们总是返回他们调用的初始值。我非常熟悉来自其他地方的承诺,但对于angularJS是新手,所以请帮助我阐明我的问题,我可能不会理解这里非常基本的东西
我正在使用工厂:
.factory('Traffic', function ($http) {
var trafficUrl = 'some url';
var httpPromise = $http.get(trafficUrl, {cache: false} );
var invalidateCache = function() {
return $http.get(trafficUrl, {cache: false} );
}
return {
all: function () {
httpPromise = invalidateCache();
return httpPromise
.then(function (response) {
//parsing the response and returning stuff (not promise)
}
}
})
发送请求,并首次解析它。
现在invalidateCache
被某人建议以避免我的问题(每次分配一个新的$http.get
以避免它引用相同的初始承诺。)
现在我的控制器: .controller('TrafficCtrl',函数($ interval,$ ionicLoading,$ scope,Traffic){
var getJams = function () {
var traffic = Traffic.all();
traffic.then(function (response) {
//doing stuff with the response
})
};
$scope.refresh = function () {
getJams();
}
})
现在,每次调用$scope.refresh
方法时,我都会看到项目“刷新”(在getJams
内调用console.log),但值仍然是第一个调用getJams()
感谢。
答案 0 :(得分:1)
从您的评论中,听起来好像浏览器正在缓存您的响应,因此您需要更新服务器逻辑以设置缓存特定标头。
您可能希望在响应中添加以下Cache-Control标头:
缓存控制:无存储,无缓存
有关缓存标头here的更多信息。
应该能够找到大量示例,以您选择的服务器端语言进行设置。
此外,您可以更多地清理代码:
.factory('Traffic', function ($http) {
var trafficUrl = 'some url';
return {
all: function () {
// don't need the invalidate call anymore
return $http.get(trafficUrl).then(function (response) {
//parsing the response and returning stuff (not promise)
}
}
})
你的控制器:
var getJams = function () {
// No need to store the initial promise call, just chain them.
Traffic.all().then(function (response) {
//doing stuff with the response
})
};