我想创建一个角度服务,它在“启动”时抓取数据并构建一个在应用程序的生命周期中不会改变的数组。我不想返回http请求的承诺。缓存结果仍然会导致'someExpensiveFunctionCall'的成本。处理这种情况的最佳方式是什么,可以确保服务将结果填充并可以在控制器和/或其他服务中使用。角度最佳实践:在服务启动时的数据
angular.module('app')
.service('MyService', function($http, defaults) {
var result = [];
$http.get('/some/url').then(function(data) {
if(angular.isDefined(data)) {
_.forEach(data, function(item) {
result.push(someExpensiveFunctionCall(item.value));
});
} else {
result = angular.copy(defaults.defaultResult);
}
});
return {
result: result
};
})
.controller(function(MyService) {
var someData = MyService.result;
})
.service(function(MyService) {
var someData = MyService.result;
});