如何确定差异执行何时结束,以便我可以在 AngularJs 中加载数据?

How can I determine when the differed execution will end so that I can load the data in AngularJs?

我正在使用本地化 cookie 跟踪当前文化。我想在应用程序启动时加载当前所选文化的所有消息,并将它们与有关其文化的信息一起保存在 localStorage 中,然后仅在所选文化发生变化时刷新它们(当 [=13= 的值] 在 localStorage 中与 cookie 中的不同)。

在我的控制器中,我设置了 $scope.messages = localisationService.messages(localisationMessagesUrl, currentCulture);

localisationService,我有

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 returns undefinedgetLocalisationsFromServer 完成之前,所以在第一次加载时我没有消息。如果我刷新页面,那么我就会正确地获取它们。我该如何解决这个问题?

制作getCachedMessagesForLanguagereturn一个deferred.promise

然后你可以做..

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