我的应用程序的一些配置数据存储在我的API服务器上(在这种情况下为form.io),并且由于很少更改,我想将其存储在localStorage中,然后根据需要进行更新。因此,在我的getStationConfig服务中,我检查localStorage中的数据,如果不存在,请从API获取并将其存储在本地以供下次使用。
问题是在promise中返回localStorage中的数据,因此我期待promise的控制器代码可以处理它。从我的控制器获取数据的代码是:
var stationPromise = shiftService.getStationConfig().then(function(data) {
vm.configSlots = data;
});
我的服务如下:
var getStationConfig = function() {
// First check to see if info is stored locally.
var config = JSON.parse(localStorage.getItem('cfdConfig'));
if (config) {
return config;
}
// Get position info from appropriate Config resource submission.
// Code borrowed from ngFormioHelper.FormioAuth.
var token = localStorage.getItem('formioToken');
var config = {
disableJWT: true,
headers: {
"x-jwt-token": token
}
};
return $http.get(Formio.getAppUrl() + '/config/submission', config)
.then(function(result) {
// Code goes here to format the data for return to the controller
// Now that it's all formatted, store the info in localstorage so that it can be retrieved from there
// later and we don't have to keep hitting the API for it.
localStorage.setItem('cfdConfig', JSON.stringify(allSlots));
return allSlots;
},
function(err) {
console.log(err);
});
};
按原样,从localStorage返回的数据(顶部的config var)与底部的allSlots格式相同,但它不在promise中,因此控制器不会&# 39;不喜欢它。我如何包装或退回它以使其成为承诺?我是否需要通过$ http.get()调用localStorage(如果可能的话)?或者另一种方式?
感谢。
答案 0 :(得分:2)
将$q
承诺服务注入您的服务并使用它来返回包含在承诺中的数据
if (config) {
return $q.resolve(config);
}