gpt4 book ai didi

angularjs - Angular JS 从工厂 AJAX 请求中保存信息

转载 作者:可可西里 更新时间:2023-11-01 17:00:55 26 4
gpt4 key购买 nike

我有一个工厂,我在其中使用 $http 方法从服务器获取数据:

.factory('$factory', function ($q, $http, $timeout, $state, $ionicHistory, $localstorage) {
var obj = [];

var functions = {
getData: function () {

var dfd = $q.defer();
if(!obj){
$http({
url: remoteUrl+'/getdata',
method: 'POST',
data: {}
}).then(function(response) {
$timeout(function(){
obj = response.data;
dfd.resolve(response.data);
}, 2000)
}, function(response) {

}
}else{
return obj;
}
return dfd.promise;
}
}
}

所以这会获取数据并将其放入一个对象中。如果我错了,请纠正我,但是这种使用工厂来执行此类操作的方法不会绑定(bind)到 Controller ,并且可以在我的应用程序中的任何地方使用。

考虑到这一点,我希望做到这一点,这样我就可以在我的应用程序中的任何地方获取数据,而不必每次都查询服务器。即一旦查询服务器,工厂就会将响应保存到一个对象(就像我现在所做的那样)。但是之后我在另一个 Controller 中访问数据时遇到了问题。

我已经开始使用 if(!obj) 行制作我认为它应该看起来的样子,但在 else 语句中我似乎不能只返回 obj 对象。它会抛出错误,因为它也没有像预期的那样返回 promise 。

我不确定我的想法是否正确。

谢谢

最佳答案

你要返回一个 promise ,所以你需要总是返回一个 promise ,即使是在缓存的响应上,你可以通过将它包装在 $q.when ( https://docs.angularjs.org/api/ng/service/ $q) 中来相对容易地在这个级别上做到这一点,这将返回立即解决的 promise 。

return $q.when(obj);

虽然 $http 服务内置了缓存,所以你可能想看看缓存部分。

https://docs.angularjs.org/api/ng/service/ $http

https://www.ng-book.com/p/Caching/

关于angularjs - Angular JS 从工厂 AJAX 请求中保存信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290848/

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