gpt4 book ai didi

javascript - 使用 Angular 工厂来保存应用程序其余部分访问的值,以最大限度地减少服务器调用

转载 作者:行者123 更新时间:2023-11-28 00:11:14 26 4
gpt4 key购买 nike

我有以下工厂:

angularModule
.factory('ArticleCategoryService', function ($http, $q) {
// Service logic
// ...

var categories = [];

var _getCategories = $http.get('/api/articles/category').success(function (_categories) {
categories = _categories;
});
// .error( function (data, status, headers, config) {
// });

// Public API here
return {
getCategories: function () {
var deferred = $q.defer();
deferred.resolve(_getCategories);
return deferred.promise;
}
};
});

这是在 Controller 中调用此服务的部分:

// Calls the getCategories function from the ArticleCategory Service,
// Will return a promise
ArticleCategoryService.getCategories()
.then(function (categoriesResult) {
$scope.categories = categoriesResult.data;
}, function (err) {
console.log(err);
});

这可行,但每次用户返回此 View /状态时都会对服务器进行 GET 调用,并且属于工厂的 categories 对象永远不会被使用。

我正在尝试使其返回工厂单例中的 categories 变量,并在站点加载时(或从第一次 GET 调用)初始化它。

但是,如果我在用户调用 getCategories 时只返回 categories,它将不会返回任何内容,因为我们需要时间进行 $http 调用。

最佳答案

检查是否定义了 categories,如果定义了,则使用变量而不是 GET 请求解析 promise :

return {
getCategories: function () {
var deferred = $q.defer();
if (categories.length > 0) {
deferred.resolve(categories);
} else {
deferred.resolve(_getCategories);
}
return deferred.promise;
}
};

关于javascript - 使用 Angular 工厂来保存应用程序其余部分访问的值,以最大限度地减少服务器调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30855940/

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