![](/img/trans.png)
[英]RxSwift 'Extra argument 'onError' after migration to Swift 4
[英]RxSwift - onError emitted twice
我一直在嘗試RxSwift,並且正在尋找一些正確的方法來與觀察者打交道。 我有一個觀察者,負責觀察發布主題 。
authPublisherSubject.asObserver()
.subscribe(onNext: { (status) in
}, onError: { [unowned self] (error) in
}, onCompleted: { [unowned self] in
}).disposed(by: disposeBag)
以下是該觀察員的職責
每當用戶點擊“登錄按鈕”時,我都會訂閱此觀察者。 方法正確嗎?
如果我收到錯誤,則下次我訂閱該觀察者時,即下次由於某種原因用戶單擊登錄時,將保留舊錯誤,並且會自動發送onError並顯示舊錯誤。 但是,據我了解,Publisher Subject僅會發出那些在觀察后發生的事件。
我不明白這是怎么回事。
這里似乎存在一些誤解。
首先,您不訂閱Observer
,而是訂閱Observable
。 可觀察者是可以觀察的東西,觀察者可以觀察。 對我來說,一個更好的辦法去想它是可觀察到的生產值,並觀察它們消耗 。 因此,您subscribe
了Observable
。 您的示例代碼有效,因為asObserver()函數僅返回self
。 那真不幸。
其次,Rx是一種聲明式編程方法,不是強制性的。 這意味着你設置在Rx鏈中只有一次,而不是“每一個按鈕被竊聽的時間。” 在視圖控制器的viewDidLoad中僅設置一次訂閱。 現在,按鈕點擊不會發出錯誤事件,因此在您尚未提及的鏈中一定有一些錯誤。
正如你在留言中提到,如果有錯誤時發出,這將打破觀察到鏈。 有幾種方法可以解決此問題。 首先也是最明顯的是確保鏈中沒有任何東西可以發出錯誤。 另一種方法是包裹可在flatMap錯誤輸出,然后或者使用操作materialize()
或catchError
的flatMap 內 。 它從逃避flatMap停止錯誤,因為如果這樣做,它會打破主鏈是非常重要的。
每當用戶點擊“登錄按鈕”時,我都會訂閱此觀察者。 方法正確嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.