Ich habe einen i18n-Dienst in meiner Anwendung, der den folgenden Code enthält:
var i18nService = function() {
this.ensureLocaleIsLoaded = function() {
if( !this.existingPromise ) {
this.existingPromise = $q.defer();
var deferred = this.existingPromise;
var userLanguage = $( "body" ).data( "language" );
this.userLanguage = userLanguage;
console.log( "Loading locale '" + userLanguage + "' from server..." );
$http( { method:"get", url:"/i18n/" + userLanguage, cache:true } ).success( function( translations ) {
$rootScope.i18n = translations;
deferred.resolve( $rootScope.i18n );
} );
}
if( $rootScope.i18n ) {
this.existingPromise.resolve( $rootScope.i18n );
}
return this.existingPromise.promise;
};
Die Idee ist, dass der Benutzer anruft ensureLocaleIsLoaded
und wartet, bis das Versprechen gelöst ist. Da der Zweck der Funktion jedoch darin besteht, nur sicherzustellen, dass das Gebietsschema geladen ist, ist es für den Benutzer vollkommen in Ordnung, es mehrmals aufzurufen.
Ich speichere derzeit nur ein einzelnes Versprechen und löse es, wenn der Benutzer die Funktion erneut aufruft, nachdem das Gebietsschema erfolgreich vom Server abgerufen wurde.
Soweit ich das beurteilen kann, funktioniert dies wie beabsichtigt, aber ich frage mich, ob dies ein angemessener Ansatz ist.