从服务返回对角度的本地存储数据的承诺

时间:2016-10-05 23:11:52

标签: javascript angularjs asynchronous promise

我的应用程序的一些配置数据存储在我的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(如果可能的话)?或者另一种方式?

感谢。

1 个答案:

答案 0 :(得分:2)

$q承诺服务注入您的服务并使用它来返回包含在承诺中的数据

if (config) {
  return $q.resolve(config);
}