私のシナリオは、検索フォームと結果リストを持つ古典的なWebページです。 Observableに結果をロードする動作をカプセル化したいと思います。RxJs:観測可能な検索結果のパターン
は、ここで私は現在、活字体でやっているものだ:pending
、present
かfailed
次のいずれか
function loadResults(query): Observable<T[]> {}
const results = new Subject<ResultEvent<T[]>>();
const results: Observable<ResultEvent<T[]>> =
form.valueChanges
.distinctUntilChanged()
.do(() => results.next(ResultEvent.pending()))
.switchMap(query => loadResults(query))
.subscribe({
next: (data: T[]) => results.next(ResultEvent.present(data)),
error: err => results.next(ResultEvent.failed(err)),
});
アイデアはresults
は常に検索の現在の状態が含まれていることです。クエリが変更されると、結果はpending
に設定され、サービスがデータを返すと結果はpresent
に設定されます。
この解決方法について私が気に入らないのは、subscribe()
への明示的な呼び出しです。私はむしろ明示的サブスクリプションを作成せずに、サブスクライブされていない単純なObservable
を(例えば、async
パイプのAngularで)購読することができます。 do
の副作用もややハッキリなようです。
const results: Obserbable<ResultEvent<T[]>> =
form.valueChanges.distinctUntilChanged()
. /* here be dragons */;
アドバイスやアイデアをお寄せいただきありがとうございます。
いいね、ありがとう。この方法でもっときれいに見えます。デバウンスについての良い点は、私は例を単純にすることを意図的にやめました。 –
@PhilippJardas質問に答えた場合は、それを受け入れたものとしてマークしてください。 :-) –
確かです。 :-) –