2015-01-21 2 views
0

Я вызываю getWeeklyDates, который вызывает cachingGlobalConfigurationService, который снова вызывает глобальную конфигурацию, если данные глобальной конфигурации не могут быть найдены в localstorage.сервис возвращает обещание, но cachingService не

Код =>

return cachingGlobalConfigurationService.getGlobalConfiguration() 
        .then(function(response1){ 

прекрасно работает, когда globalConfiguration еще не кэшируются, потому что тогда я делаю вызов Ajax и вернуть обещание.

Но выше строка кода с .then (функция (response1) не определено, когда мой globalConfiguration можно найти в LocalStorage и только это возвращается:

else { 
      return cachedGlobalConfiguration; 
     } 

Я предполагаю, что я не могу использовать .then в этом случае, но я хотел бы.

Как я могу это исправить?

this.getWeeklyDates= function (projectId, currentDate) { 

     return cachingGlobalConfigurationService.getGlobalConfiguration() 
       .then(function(response1){ 

     // do business logic 
    }); 

'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!'); 
    //}); 
    } 

});

ответ

0

Вы можете ввести $q сервис и использовать $q.when для обертывания объекта во время его возвращения, так что вы всегда возвращаете обещание от своего api (и просто удаляете лишнее другое). Также не забывайте отклонять обещание от обратного вызова от обещания (при необходимости).

'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 - Обертка объект, который может быть значение или (третья сторона) тогда в состоянии обещание в $ д обещание. Это полезно, когда вы имеете дело с объектом, который может или не может быть обещанием, или если обещание исходит от источника, которому нельзя доверять.

+0

Спасибо, хорошо выглядит и работает :-) – Elisabeth

Смежные вопросы