RxJava(以及其衍生物如 RxGroovy 和 RxScala)開發了一種名為「Single」的 Observable 變體。
Single 類似於 Observable,但它不是發射一系列值(從無到無限多個),而是始終發射一個值或一個錯誤通知。
因此,您不需要使用訂閱 Observable 時的三種方法來響應通知(onNext, onError,以及onCompleted),您只需使用兩種方法來訂閱 Single
Single 只會調用這些方法中的一個,且只會調用一次。一旦調用任一方法,Single 就會終止,對其的訂閱也會結束。
與 Observables 一樣,可以透過各種運算子來操作 Singles。某些運算子也允許 Observable 世界和 Single 世界之間有介面,讓您可以混合使用這兩種變體
運算子 | 回傳 | 描述 |
---|---|---|
compose | Single | 允許您建立自訂運算子 |
concat和concatWith | Observable | 將多個 Singles 發射的項目串聯為 Observable 發射 |
create | Single | 透過顯式調用訂閱者方法從頭開始建立 Single |
delay | Single | 將 Single 項目的發射時間延後 |
doOnError | Single | 回傳一個 Single,當它調用 onError 時,也會調用您指定的方法 |
doOnSuccess | Single | 回傳一個 Single,當它調用 onSuccess 時,也會調用您指定的方法 |
error | Single | 回傳一個會立即通知訂閱者發生錯誤的 Single |
flatMap | Single | 回傳一個 Single,該 Single 是將函式應用於 Single 發射的項目所產生的結果 |
flatMapObservable | Observable | 回傳一個 Observable,該 Observable 是將函式應用於 Single 發射的項目所產生的結果 |
from | Single | 將 Future 轉換為 Single |
just | Single | 回傳一個發射指定項目的 Single |
map | Single | 回傳一個 Single,該 Single 發射將函式應用於來源 Single 發射的項目所產生的結果 |
merge | Single | 將發射第二個 Single 的 Single 轉換為發射第二個 Single 發射的項目的 Single |
merge和mergeWith | Observable | 將多個 Singles 發射的項目合併為 Observable 發射 |
observeOn | Single | 指示 Single 在特定的 排程器 上調用訂閱者方法 |
onErrorReturn | Single | 將發出錯誤通知的 Single 轉換為發射指定項目的 Single |
subscribeOn | Single | 指示 Single 在特定的 排程器 上運作 |
timeout | Single | 回傳一個 Single,如果來源 Single 在指定的時間段內沒有發射值,則會發出錯誤通知 |
toSingle | Single | 將發射單個項目的 Observable 轉換為發射該項目的 Single |
toObservable | Observable | 將 Single 轉換為發射 Single 發射的項目然後完成的 Observable |
zip和zipWith | Single | 回傳一個 Single,該 Single 發射將函式應用於兩個或多個其他 Singles 發射的項目所產生的項目 |
本頁的以下章節將提供圖表來以示意方式解釋這些運算子。此圖表解釋了如何在圖表中表示 Singles
此運算子也有實例版本
此運算子也有一個版本,允許您在特定的 排程器 上執行延遲
還有一個版本會將 排程器 作為參數:
merge 的一個版本會取得發射第二個 Single 的 Single,並將其轉換為發射該第二個 Single 發射的項目的 Single
另一個版本會取得兩個或多個 Singles,並將它們合併到一個 Observable 中,該 Observable 發射來源 Singles 發射的項目(以任意順序)
如果 Timeout 在訂閱後未在指定的時間段內發射項目,Timeout 將導致 Single 中止並發出錯誤通知。其中一個版本允許您透過指定的時間單位數來設定此超時
您也可以為計時器指定特定的 排程器 來運作
timeout 運算子的一個版本允許您切換到備份 Single,而不是在超時到期時傳送錯誤通知
這個版本也有一個特定於 排程器 的版本