gpt4 book ai didi

angularjs - 在 Angular 中让多个调用等待同一个 Promise

转载 作者:行者123 更新时间:2023-12-03 07:02:04 24 4
gpt4 key购买 nike

我在一个页面上有多个使用相同服务的 Controller ,为了示例,我们将该服务称为 USER。

第一次调用 USER.getUser() 时,它会执行 $http 请求来获取有关用户的数据。调用完成后,它将数据存储在 USER.data 中。如果再次调用 USER.getUser(),它会检查 USER.data 中是否有数据,如果有数据,则返回该数据而不是进行调用。

我的问题是对 USER.getUser() 的调用发生得太快,以至于 USER.data 没有任何数据,因此它再次触发 $http 调用。

这是我现在为用户工厂所做的:

.factory("user", function($http, $q){
return {
getUser: function(){
var that = this;
var deferred = $q.defer();
if(that.data){
deferred.resolve(that.data);
} else {
$http.get("/my/url")
.success(function(res){
that.data = res;
deferred.resolve(that.data);
});
}
return deferred.promise;
}
}
});

我希望我的问题有意义。任何帮助将不胜感激。

最佳答案

这对你有用吗?

.factory("user", function($http, $q) {
var userPromise;

return {
getUser: function () {
if (userPromise) {
return userPromise;
}

userPromise = $http
.get("/my/url")
.then(function(res) {
return res.data;
});

return userPromise;
}
}
})

关于angularjs - 在 Angular 中让多个调用等待同一个 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29421123/

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