0
我有一個角度服務MyService 裏面有get方法。它得到的信息從服務器,並將其設置爲本地變量,如果變量未定義,overwise返回變量防止來自多個服務器負載的服務
export class MyService{
private userSettings: UserSettings;
private updateProcessing: boolean = false;
private deferred : any;
constructor(
private $http: ng.IHttpService,
private $q: ng.IQService,
private $log: ng.ILogService) {
}
public get(fromServer: boolean = false) {
var self = this;
if (self.updateProcessing) {
return self.deferred.promise;
}
else if (!self.userSettings || fromServer) {
return self.getFromServer();
} else
return self.$q.resolve(self.userSettings);
}
private getFromServer(): ng.IPromise<any> {
var self = this;
self.updateProcessing = true;
self.deferred = self.$q.defer();
var url = self.getSettingsUrl();
self.$http.get(url).then(
(result: any) => {
self.userSettings = result.data;
self.updateProcessing = false;
self.deferred.resolve(result.data);
},
error => {
this.$log.error(error);
self.updateProcessing = false;
self.deferred.reject(error);
}
);
return self.deferred.promise;
}
}
當我通過這項服務3個不同的控制器,它們都從服務器獲取變量的值。 我試圖保存承諾,如果請求已經在解決而不是創建新的請求時檢測到它。 現在的代碼我貼我在控制器
this.MyService.get().then(()=>{
});
做到永不進去然後回調。 如果重要,我使用角度庫的版本:「1.5.8」。
謝謝你真是太棒了! –