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