在下面的代码中,函数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);
}
}
使用发布最后
export class Service {
private sharedStream$: Observable< IUser>;
constructor(public http: AuthHttp) {
this.sharedStream$ = this. getCurrentUser()
.publishLast()
.refCount();
}
getUserObservable(): Observable< IUser> {
return this.sharedStream$;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句