Tôi có một dịch vụ i18n trong ứng dụng của mình chứa mã sau:
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;
};
Ý tưởng là người dùng sẽ gọi ensureLocaleIsLoaded
và đợi lời hứa được giải quyết. Nhưng do mục đích của hàm là chỉ đảm bảo rằng ngôn ngữ được tải, người dùng sẽ hoàn toàn ổn khi gọi nó nhiều lần.
Tôi hiện chỉ đang lưu trữ một lời hứa duy nhất và giải quyết nó nếu người dùng gọi lại hàm sau khi miền địa phương đã được truy xuất thành công từ máy chủ.
Từ những gì tôi có thể nói, điều này đang hoạt động như dự định, nhưng tôi tự hỏi liệu đây có phải là một cách tiếp cận phù hợp hay không.