Saya memiliki layanan i18n di aplikasi saya yang berisi kode berikut:
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;
};
Idenya adalah bahwa pengguna akan menelepon ensureLocaleIsLoaded
dan menunggu janji diselesaikan. Tetapi mengingat bahwa tujuan dari fungsi ini hanya untuk memastikan bahwa lokal dimuat, akan sangat baik bagi pengguna untuk memanggilnya beberapa kali.
Saat ini saya hanya menyimpan satu janji dan menyelesaikannya jika pengguna memanggil fungsi itu lagi setelah lokal berhasil diambil dari server.
Dari apa yang saya tahu, ini berfungsi sebagaimana mestinya, tetapi saya bertanya-tanya apakah ini pendekatan yang tepat.