【发布时间】:2013-08-22 17:08:54
【问题描述】:
我正在使用一项服务来在控制器之间共享数据。但是,即使在发出新请求时,该服务也会返回带有缓存数据的承诺。根据defer 实例的创建位置,要么返回实时数据但双向绑定中断,要么双向绑定有效但返回缓存数据。
如何防止带有缓存数据的承诺返回并保持双向绑定?
我已经放了一个plunker来说明这个案例:http://plnkr.co/edit/SyBvUu?p=preview为了完整起见,这里是故障排除服务:
app.service('myService', function($http, $q) {
// When instancing deferred here two way binding works but cached data is returned
var deferred = $q.defer();
this.get = function(userId) {
// When instancing deferred here two way binding breaks but live data is returned
//var deferred = $q.defer();
console.log('Fetch data again using id ', userId);
var url = userId + '.json';
$http.get(url, {timeout: 30000, cache: false})
.success(function(data, status, headers, config) {
deferred.resolve(data, status, headers, config);
})
.error(function(data, status, headers, config) {
deferred.reject(data, status, headers, config);
});
return deferred.promise;
};
});
更新:问题不在于数据被缓存,而在于我不了解如何共享数据并且共享数据不能是原始数据。请参阅下面我自己的答案。
【问题讨论】:
-
嗯,只是为了运动-如果你这样做
var url = userId+".json?cacheBreaker="+Date.now();会发生吗? -
是的,我之前尝试过该路径,但无济于事。当请求不同的 json 文件时,返回的响应包含预期的用户数据。