RxJava操做符serialize 筆記<二十六>

若是您不能保證您的operator將遵照 Rx 協議,例如由於您從多個源異步推送,則能夠使用serialize運算符。serialize運算符會將不可靠的可觀察量轉換爲合法的,順序的可觀察量。ios

讓咱們首先建立一個違反協議的observable並訂閱它。git

日誌輸出:github

儘管咱們的observable試圖釋放,但最終結果卻遵照了Rx規格。之因此發生這種狀況,是由於訂閱(很是合理地)認爲序列結束時訂閱終止了訂閱。這並不意味着咱們將始終關注問題。還有一個名爲unsafeSubscribe的方法,它不會自動取消訂閱。安全

輸出:異步

咱們訂閱者的預期行爲與前面的示例相同(咱們建立了一個Subscriber實例,由於unsafeSubscribe沒有帶lambda的重載)。可是,咱們能夠在這裏看到咱們沒有取消訂閱,咱們一直收到通知。3d

unsafeSubscribe在其餘方面也是不安全的,例如錯誤處理。它的用處是有限的。文檔說它應該只用於使用嵌套訂閱的自定義運算符。爲了保護這些operator不接收和非法序列,咱們能夠應用serialize操做符。日誌

輸出:blog

咱們看到,儘管咱們沒有取消訂閱,但非法通知已被過濾掉。文檔

 

下節再續!it

原文:https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%203%20-%20Taming%20the%20sequence/7.%20Custom%20operators.md#lift

相關文章
相關標籤/搜索