Tengo un servicio i18n en mi aplicación que contiene el siguiente código:
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;
};
La idea es que el usuario llame ensureLocaleIsLoadedy espere a que se resuelva la promesa. Pero dado que el propósito de la función es solo garantizar que se cargue la configuración regional, estaría perfectamente bien que el usuario la invocara varias veces.
Actualmente solo estoy almacenando una única promesa y la resuelvo si el usuario vuelve a llamar a la función después de que la configuración regional se haya recuperado con éxito del servidor.
Por lo que puedo decir, esto está funcionando según lo previsto, pero me pregunto si es un enfoque adecuado.