2017-02-24 17 views
1

私は、被写体を設定して、そこにいくつかの方法を入れました。それは私が単に最後の呼び出しを追跡すると思った.switch()に達するまで、意図したとおりに動作するようです。私はエラーProperty 'subscribe' does not exist on type 'ApiChange'を取得しますそれは観測可能からApiChange型に変換するようです。私はこの行動を理解していません。別の演算子を使うべきですか?rxjsスイッチunwrapping observable


サービス:

private apiChange = new Subject<ApiChange>(); 
    apiChange$ = this.apiChange.asObservable().distinctUntilChanged().debounceTime(1000).switch(); 

コンポーネント:

this.service.apiChange$.subscribe(change => { 
      this.service.method(change); 
     }); 
+1

ありがとうございます!あなたは「最後の呼び出しを追跡する」という意味を明確にするのに役立つことができますか? switch()は、高次の観測可能な連鎖(observable)(値ではなくオブザーバブルを送出する)で呼び出されることを予期します。 –

+0

最も最近の選択が返されます。 –

+0

switch()は、高次の観測可能な連鎖(値ではなくオブザーバブルを出すオブザーバブル)で呼び出されることを期待しています –

答えて

3

.debounceTime(1000)が既にあなただけの最大値を取得します保証しますあなたの観察可能な鎖から1秒間に放出される1つの値の1秒の静寂時間の前の値はすべて破棄されます。シンプル件名(ないReplaySubject)で

は、過去の値はとにかく加入者に提供されていません。

.switch()をスキップして、チェーンなしで楽しむことができます。

+0

まさに私です探していたこれは完璧な意味合いがあります。 –

+0

デバウンスの後にコールが起動された場合、他のコールよりも時間がかかりません。 –

+0

これ以上の文脈がなければ、私が有用なコメントをすることは難しいでしょう。購読方法の一部としてhttpコールを発信し、その購読の結果だけを購読して使用するかどうかを明確にするのに役立つことができますか?次に、観測可能なチェーンの一部としてswitchMap()を使用し、そこにhttp呼び出しを行うことをお勧めします。これにより、以前のhttp呼び出しがキャンセルされ、最新の応答のみが処理されます –

関連する問題