gpt4 book ai didi

angularjs - 使用 $resource promise 模式缓存数据

转载 作者:行者123 更新时间:2023-12-03 05:27:06 25 4
gpt4 key购买 nike

假设我的服务从 $resource get 返回一个 promise ,我想知道这是否是缓存数据的正确方法。在此示例中,点击后退箭头并返回搜索结果后,我不想再次查询网络服务器,因为我已经有了它们。这是处理这种情况的正确模式吗?下面的示例是查询 Flixter(烂番茄)Api。

精简代码:

Controller :

function SearchCtrl($scope, $route, $routeParams, $location, DataService) {
DataService.search($routeParams.q).then(function(data){
$scope.movies = data.movies;
});
}

服务:

angular.module('myApp.services', []).
factory('DataService', ['$q', '$rootScope', 'JsonService', function ($q, $rootScope, JsonService) {

var movie = {};
var searchResults = {};
var searchq = '';
var service = {

search: function(q) {

var d = $q.defer();
// checking search query, if is the same as the last one,
//resolve the results since we already have them and don't call service
// IS THIS THE CORRECT PATTERN
if (q==searchq) {
d.resolve(searchResults);
} else {
// returns a $resource with defined getdata
JsonService.search.movieSearch(q, 20, 1).getdata(function(data){
searchResults = data;
searchq = q;
d.resolve(searchResults);
});
}
return d.promise;

},
getSearchResults: function() {
return searchResults;
}
};

return service;
}]);

我无法提供有效的示例,因为它会暴露我的 API key 。

最佳答案

我伪造了实际的ajax请求,但我认为一般的想法应该适用,你可以看到 full demo here

这是 Controller ,它只是执行搜索,然后设置结果:

myApp.controller('MyCtrl', function($scope, DataService) {
$scope.search = function(){
DataService
.search($scope.q)
.then(function(response){
$scope.fromCache = response.fromCache;
$scope.results = response.results;
});
};
});

在 DataService 中,我只是将结果保存到一个与查询无关的对象中。它很简单,但希望能帮助您入门。如果你想要类似的东西,你可以将它保存在 html5 存储或其他东西中。

您需要在此处输入实际的 ajax 调用,但原则仍然存在。

myApp.factory('DataService', function($q){
var resultsCache = {};
return {
search: function(query){
var deferred = $q.defer();
if (resultsCache[query]) {
resultsCache[query].fromCache = true;
}
else {
resultsCache[query] = {results: [{name: 'result one'}, {name: 'result two'}]};
}
deferred.resolve(resultsCache[query]);
return deferred.promise;
}
};
});

希望有帮助

关于angularjs - 使用 $resource promise 模式缓存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16248768/

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