J'ai un service i18n dans mon application qui contient le code suivant:
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;
};
L'idée est que l'utilisateur appelle ensureLocaleIsLoaded
et attend que la promesse soit résolue. Mais étant donné que le but de la fonction est uniquement de s'assurer que la locale est chargée, il serait parfaitement normal que l'utilisateur l'invoque plusieurs fois.
Je suis actuellement en train de stocker une seule promesse et de la résoudre si l'utilisateur appelle à nouveau la fonction après que les paramètres régionaux ont été récupérés avec succès sur le serveur.
D'après ce que je peux dire, cela fonctionne comme prévu, mais je me demande si c'est une approche appropriée.