2017-02-24 65 views
1

我設置了一個主題,然後在其上放置了一些方法。它似乎按照預期工作,直到它到達.switch(),我認爲它只會記錄最後一次調用。我得到錯誤Property 'subscribe' does not exist on type 'ApiChange'它似乎將它轉換爲從可觀察的類型ApiChange。我不明白這種行爲。我應該使用不同的操作員嗎?rxjs switch 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()期望在一個高階可觀察鏈上進行調用(可觀察到的發出可觀察值而不是值) –

+0

只是最近的選擇是返回的。 –

+0

你能給我舉一個例子,你的意思是:switch()期望在一個高階可觀察鏈上調用(觀察結果發出可觀測值而不是值) –

回答

3

.debounceTime(1000)已經將保證你只會得到一個最大從您的可觀察鏈每秒發出的一個值。所有在1秒安靜時間之前的值將被丟棄。

用一個簡單的主題(不是ReplaySubject),過去的值不被提供給用戶的反正。

您可能只是想跳過.switch()並享受沒有它的鏈。

+0

正確的是我正在尋找。這非常合理。 –

+0

如果在去抖動後發起的呼叫比其他呼叫返回的時間少,那麼哼聲最終不起作用。 –

+0

沒有更多的上下文,我很難做出有用的評論。你能否幫助澄清一下,你是否將http調用作爲你的訂閱方法的一部分,並且只將它的結果用於不同的訂閱?然後,我會建議使用switchMap()作爲可觀察鏈的一部分,並在那裏進行http調用。這將「取消」以前的http調用,並只處理最新的響應 –