Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 服务返回承诺,但大笑服务不返回_Javascript_Angularjs_Angular Services - Fatal编程技术网

Javascript 服务返回承诺,但大笑服务不返回

Javascript 服务返回承诺,但大笑服务不返回,javascript,angularjs,angular-services,Javascript,Angularjs,Angular Services,我正在调用getWeeklyDates,它正在调用cachingGlobalConfiguration服务,如果在本地存储中找不到globalConfiguration数据,它将再次调用globalConfiguration服务 代码=> return cachingGlobalConfigurationService.getGlobalConfiguration() .then(function(response1){ 当globalConfigurat

我正在调用getWeeklyDates,它正在调用cachingGlobalConfiguration服务,如果在本地存储中找不到globalConfiguration数据,它将再次调用globalConfiguration服务

代码=>

return cachingGlobalConfigurationService.getGlobalConfiguration()
                   .then(function(response1){
当globalConfiguration尚未缓存时,它可以正常工作,因为我会调用ajax并返回一个承诺

但是当可以在本地存储中找到我的全局配置时,上面带有.thenfunctionresponse1的代码行是未定义的,只返回以下内容:

 else {
          return cachedGlobalConfiguration;
        }
我想我不能用。那么在这种情况下,我想

我怎样才能解决这个问题

一,

二,

三,

})

您可以注入$q服务,并在返回时使用它来包装对象,这样您就可以始终从api中返回承诺,并删除多余的else。如果需要的话,还记得拒绝承诺

'use strict';
angular.module('test').service('cachingGlobalConfigurationService', function (localStorageService, globalConfigurationService, $q) {
  this.getGlobalConfiguration = function () {

    var cachedGlobalConfiguration = localStorageService.get('globalConfiguration');
    if (cachedGlobalConfiguration) {
        //Return a promise
        return $q.when(cachedGlobalConfiguration);
     }

     return globalConfigurationService.getGlobalConfiguration().then(
        function (globalConfiguration) {
          localStorageService.set('globalConfiguration', globalConfiguration);
          return globalConfiguration;
        },
        function (error) {
          console.log('error', error);
          return $q.reject(error); //<-- reject
        });
  };

  //....
});
$q.when-将可能是值或第三方的对象包装为$q承诺。当您处理的对象可能是承诺,也可能不是承诺,或者承诺来自不可信任的来源时,这非常有用

'use strict';
angular.module('test').service('cachingGlobalConfigurationService', function (localStorageService, globalConfigurationService) {
  this.getGlobalConfiguration = function () {

    var cachedGlobalConfiguration = localStorageService.get('globalConfiguration');
    if (!cachedGlobalConfiguration) {
      return globalConfigurationService.getGlobalConfiguration().then(
        function (globalConfiguration) {
          localStorageService.set('globalConfiguration', globalConfiguration);
          return globalConfiguration;
        },
        function (error) {
          console.log('error', error);
        });
    }
    else {
      return cachedGlobalConfiguration;
    }
  };

  this.saveGlobalConfiguration = function (globalConfiguration) {

    // TODO: Only save to local storage when service.save was successfully
    localStorageService.set('globalConfiguration', globalConfiguration);
    globalConfigurationService.saveGlobalConfiguration(globalConfiguration);
  }
});
'use strict';
angular.module('test').service('globalConfigurationService', function ($http) {
  this.getGlobalConfiguration = function () {

    // TODO get from db
    var path = 'scripts/model/globalConfiguration.json';
    return $http.get(path).then(function (response) {
      return response.data.globalConfiguration;
    });
  };

  this.saveGlobalConfiguration = function (globalConfiguration) {

    // TODO: save on db
    //var path = 'scripts/model/globalConfiguration.json';
    //return $http.post(path, globalConfiguration).then(function (response) {
    //  alert('global configuration was saved succesfully!');
    //});
  }
'use strict';
angular.module('test').service('cachingGlobalConfigurationService', function (localStorageService, globalConfigurationService, $q) {
  this.getGlobalConfiguration = function () {

    var cachedGlobalConfiguration = localStorageService.get('globalConfiguration');
    if (cachedGlobalConfiguration) {
        //Return a promise
        return $q.when(cachedGlobalConfiguration);
     }

     return globalConfigurationService.getGlobalConfiguration().then(
        function (globalConfiguration) {
          localStorageService.set('globalConfiguration', globalConfiguration);
          return globalConfiguration;
        },
        function (error) {
          console.log('error', error);
          return $q.reject(error); //<-- reject
        });
  };

  //....
});