gpt4 book ai didi

javascript - 防止 AngularJS $http promise 返回缓存的 JSON 数据

转载 作者:行者123 更新时间:2023-11-29 10:11:56 25 4
gpt4 key购买 nike

在我的 AngularJS 应用的注册过程中,我不断更新用户对象。

这可能是错误的做法,但我对所有这些注册步骤都使用了一个“注册” Controller (因为这些步骤中的逻辑都非常相似,它使代码更整洁,而不是制作一个每个 View 都有单独的“signup1”、“signup2”等 Controller 。

我 promise 从我的数据库中返回 userInfo:

.service('userInfo', function ($http, $cookies) {
var userId = $cookies.id;
console.log("UI Cookies", $cookies);

var promise = $http.get('/api/findProfile/' + userId, { cache: false}).
success(function (data) {
var userInfo = data;
console.log("This is fresh data!") // This logs the first time I load my page, but never again
return userInfo;
}).error(function(data) {
console.log("ERROR")
return userInfo
});
return promise;

})

当从一个注册步骤转到下一个注册步骤时,我会更新 MongoDB 上的个人资料信息,然后加载下一页。如果我通过从我的 Controller 更改 $location('') 加载页面,我会得到旧的 userInfo,它还没有在我的数据库中更新。但是,如果我刷新整个页面,我会得到正确的、更新的 userInfo

这是缓存问题吗?我尝试将 {cache: false} 传递给我的 $http promise,但我没有获得新数据(如 console.log("这是新数据!”);相反,我正在取回缓存数据。

除了在 Angular 中强制重新加载整页之外,我该如何解决这个问题?

最佳答案

这不是缓存问题,或者至少不是您的想法。

Services and factories are singletons in angular ,这意味着它们在第一次被请求注入(inject)之前被初始化一次。之后服务函数就不会运行了,所有的controller都会收到同一个对象。 (在服务的情况下,注入(inject)的对象是通过使用服务函数作为构造函数创建的)

如果您想在每次加载 View 时轮询一些数据,则必须在 Controller 中初始化请求(无论如何您都可以通过服务来完成)——它会在不重新加载浏览器页面的情况下重新初始化。


此外,您似乎在使用 promise 和返回值方面遇到了一些问题。从错误和成功处理程序返回是没有意义的,因为它们的返回值将被丢弃。参见 this discussion有关从异步函数“返回”的更多信息。

如果您只是从服务中的函数返回 $http promise 可能是最简单的,然后每个 Controller 都可以适本地处理该 promise,最终将您的服务代码缩减为:

.service('userInfo', function ($http, $cookies) {
var userId = $cookies.id;
console.log("UI Cookies", $cookies);

//this function returns the promise returned by $http.get
this.getData = function(){
return $http.get('/api/findProfile/' + userId, { cache: false});
};
})

关于javascript - 防止 AngularJS $http promise 返回缓存的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31826396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com