1

Ich behalte die aktuelle Kultur mit Lokalisierungs-Cookie. Ich möchte alle Nachrichten für die aktuell ausgewählte Kultur laden, wenn die Anwendung gestartet wird, und sie in localStorage zusammen mit Informationen über ihre Kultur behalten und sie dann nur aktualisieren, wenn sich die ausgewählte Kultur ändert (wenn der Wert in localStorage sich von dem anderen unterscheidet) im Cookie).Wie kann ich feststellen, wann die abweichende Ausführung endet, damit ich die Daten in AngularJs laden kann?

In meinem Controller, habe ich $scope.messages = localisationService.messages(localisationMessagesUrl, currentCulture);

In localisationService, ich

haben
app.service("localisationService", function ($q, $http, localStorageService) { 

     var getCachedMessagesForLanguage = function (localisationMessagesUrl, language) { 
      console.log('getCachedMessagesForLanguage'); 
      var messages = localStorageService.get('Localisation'); 
      if (!messages || language !== localStorageService.get('Language')) { 

       getLocalisationsFromServer(localisationMessagesUrl).then(function (serverMessages) { 
        localStorageService.add('Localisation', messages); 
        localStorageService.add('Language', language); 

       }); 
      } 
      return localStorageService.get('Localisation') 

     } 

     function getLocalisationsFromServer(localisationMessagesUrl) {    
      return $q(function (resolve) { 
       $http.get(localisationMessagesUrl) 
        .then(function (response) { 
         resolve(response.data); 
        }); 
      }); 
     }   

     return {     
      messages: function (localisationMessagesUrl, language) { 
       return getCachedMessagesForLanguage(localisationMessagesUrl, language); 
      } 
     }; 

    }); 

getCachedMessagesForLanguage kehrt undefined vor getLocalisationsFromServer abgeschlossen ist, so auf der ersten Last ich keine Nachrichten vorliegen. Wenn ich die Seite aktualisiere, bekomme ich sie richtig. Wie kann ich das lösen?

Antwort

1

make getCachedMessagesForLanguage eine deferred.promise Rückkehr

Anschließend können Sie tun ..

getCachedMessagesForLanguage(localisationMessagesUrl, 
language).then(function(Localisation) { 
    return getLocalisationsFromServer(localisationMessagesUrl) 
}).then(function(responseFromGetLocalisationsFromServer) { 
    // do your thing here 
}) 
Verwandte Themen