シナリオ:
- ユーザーは、単一のストリームに結合されたフィルターを使用します
- フィルタが変更されると、バックエンドへのイベントが発生して「安価な」データが取得されます
- 「安価な」データが到着すると、同じパラメーターを持つ別のリクエストが別のエンドポイントに発行され、安価なデータを充実させるために使用される「高価な」データが返されます。リクエストは 1 秒遅らせる必要があり、ユーザーがフィルターを変更しない場合にのみ発生します (それ以外の場合は 1 秒待機する必要があります)。
そして、私は3)中間変数のないオプションに苦労しています。
let filterStream = Rx.Observable
.combineLatest(
filterX,
filterY,
(filterX, filterY) => {
x: filterX,
y: filterY
}
)
.map((filters) => {
limit: 100,
s: filters.x.a,
f: filters.x.b + filters.y.c,
})
.distinctUntilChanged()
let cheapDataStream = filterStream
.flatMapLatest((filterQuery) =>
Rx.Observable.fromPromise(cheapBackendApiCall(filterQuery)))
// render cheap results
cheapDataStream
.map(result => transformForDisplay(result))
.subscribe(result => {
//render
// how do i invoke expensiveApiCall() with `filterQuery` data here?
// with a delay, and only if filterQuery has not changed?
});