2017-08-29 137 views
0

我經歷了兩種類型的錯誤處理中RxJS傳來:訂閱中的onError和catch操作符有什麼區別?

  • subscribe
  • 使用第二個參數(onError)使用catch操作。

他們之間有什麼區別?什麼是一些教科書的例子或使用其中任何一個的規則?


this.stream$.subscribe(callback, err => console.error(err)) 

// vs 

this.stream$.catch(err => console.error(err)).subscribe(callback) 
+0

cf https://medium.com/@benlesh/on-the-subject-of-subjects-in-rxjs-2b08b7198b93錯誤傳播部分 – user3743222

+1

傳遞給['catch'](http ://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-catch)運算符返回用於繼續鏈的observable。傳遞給'subscribe'的錯誤處理程序沒有類似的行爲。 – cartant

回答

2

在你的榜樣,你會得到在這兩種情況下相同的輸出。至於經驗法則:

  • 使用do如果你想做一些與錯誤(例如記錄它),你不想創建預訂。例如,你可能會這樣做,例如,將一些庫(例如angular的Http庫)封裝在添加日誌記錄的通用包裝器中(可能會在出現錯誤時在屏幕底部彈出一個敬酒)。
  • 使用subscribe如果你想做一些與錯誤(例如記錄它),你想創建預訂。遵循Http的例子,這可能是如果你想啓動一個請求,並顯示任何你要放置響應的地方出現的錯誤。如果你想處理錯誤並且恢復。例如,可能要捕獲401錯誤,刷新登錄憑據,然後重試請求。

在您的示例中,由於您只是記錄錯誤,因此catch將不合適。

相關問題