【发布时间】:2017-05-05 11:01:08
【问题描述】:
在以下代码中,函数onReady1() 和onReady2() 是否等效?有什么区别?有没有更好的方法来编写这个函数?
onReadyx() 函数应该在用户立即可用时返回用户,否则它会等到用户可用。在任何给定时间都会多次调用此函数。
export class UserService {
private _user: IUser;
private userObservable: Observable<IUser>;
constructor(private http: Http) {
this.userObservable = this.getCurrentUser();
}
public onReady1() {
return Observable.create((observer: Observer<IUser>) => {
if (this._user) {
observer.next(this._user);
observer.complete();
return;
}
this.userObservable.subscribe(user => {
this._user = user;
observer.next(user);
observer.complete();
});
});
}
public onReady2() {
return Observable.defer(() => {
if (this._user) {
return Observable.of(this._user);
}
return this.userObservable.do(user => this._user = user);
});
}
private getCurrentUser() {
return this.http.get('/currentuser')
.map(response => response.json() as IUser);
}
}
【问题讨论】:
-
你为什么要这样做?您是否要缓存用户?
-
@n00dl3 是的。我在
IUser中获得了一个令牌,我想将其用于后续服务调用。 -
然后去@JuliaPassynkova 的解决方案。
标签: typescript rxjs rxjs5