REST APIからアイテムのリストを取得しています。ユーザーはクリックしてそれぞれのユーザーと対話し、未使用のカップルが残っているだけの場合は、さらにアイテムを取得するリクエストを繰り返したいと思います。私は適切なRxJs(5)ストリーム指向のアプローチを使用してこれをしようとしています。RxJs:サーバーからのリクエストリスト、値の消費、値がほとんどなくなったときの再リクエスト
だから、のようなもの:
var userClick$ = Observable.fromEvent(button.nativeElement, 'click');
var needToExtend$ = new BehaviorSubject(1);
var list$ = needToExtend$
.flatMap(() => this.http.get("http://myserver/get-list"))
.flatMap(x => x['list']);
var itemsUsed$ = userClick$.zip(list$, (click, item) => item);
itemsUsed$.subscribe(item => use(item));
し、その後、必要な時に再ロードをトリガするために:
list$.subscribe(
if (list$.isEmpty()) {
needToExtend$.next(1);
}
)
をこの最後のビットが間違っている、と手動で再トリガはいないようです非常に "ストリーム指向の"意図したように動作した場合でも。何か案は?
これはRxjs - Consume API output and re-query when cache is emptyと似ていますが、APIによって返されるリストの長さについては仮定できません。リストが完全に消耗される前に再度リクエストしたいと思います。そして、そこの解決策は少し賢明だと感じます。もっと読みやすい方法が必要でしょうね。
アイテムを複数回クリックすることはできますか?それは問題ですか?コンポーネントテンプレートのコード/ what use()はここで役に立ちます – bryan60