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”。
谢谢你真是太棒了! –