1
次のコードでは、関数onReady1()
とonReady2()
は同等ですか?違いは何ですか?この関数を書く良い方法はありますか?条件付きrxjsを返すより良い方法Observable
ファンクション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
@ n00dl3はい。私は後続のサービス呼び出しに使用する 'IUser'のトークンを取得します。 – nullDev
それから@JuliaPassynkovaの解決に向かう。 – n00dl3