Single

RxJava(以及其衍生物如 RxGroovy 和 RxScala)開發了一種名為「Single」的 Observable 變體。

Single 類似於 Observable,但它不是發射一系列值(從無到無限多個),而是始終發射一個值或一個錯誤通知。

因此,您不需要使用訂閱 Observable 時的三種方法來響應通知(onNext, onError,以及onCompleted),您只需使用兩種方法來訂閱 Single

onSuccess
Single 會將其發射的唯一項目傳遞給此方法
onError
Single 會將導致 Single 無法發射項目的 Throwable 傳遞給此方法

Single 只會調用這些方法中的一個,且只會調用一次。一旦調用任一方法,Single 就會終止,對其的訂閱也會結束。

透過 Single 運算子進行組合

與 Observables 一樣,可以透過各種運算子來操作 Singles。某些運算子也允許 Observable 世界和 Single 世界之間有介面,讓您可以混合使用這兩種變體

運算子回傳描述
composeSingle允許您建立自訂運算子
concatconcatWithObservable將多個 Singles 發射的項目串聯為 Observable 發射
createSingle透過顯式調用訂閱者方法從頭開始建立 Single
delaySingle將 Single 項目的發射時間延後
doOnErrorSingle回傳一個 Single,當它調用 onError 時,也會調用您指定的方法
doOnSuccessSingle回傳一個 Single,當它調用 onSuccess 時,也會調用您指定的方法
errorSingle回傳一個會立即通知訂閱者發生錯誤的 Single
flatMapSingle回傳一個 Single,該 Single 是將函式應用於 Single 發射的項目所產生的結果
flatMapObservableObservable回傳一個 Observable,該 Observable 是將函式應用於 Single 發射的項目所產生的結果
fromSingle將 Future 轉換為 Single
justSingle回傳一個發射指定項目的 Single
mapSingle回傳一個 Single,該 Single 發射將函式應用於來源 Single 發射的項目所產生的結果
mergeSingle將發射第二個 Single 的 Single 轉換為發射第二個 Single 發射的項目的 Single
mergemergeWithObservable將多個 Singles 發射的項目合併為 Observable 發射
observeOnSingle指示 Single 在特定的 排程器 上調用訂閱者方法
onErrorReturnSingle將發出錯誤通知的 Single 轉換為發射指定項目的 Single
subscribeOnSingle指示 Single 在特定的 排程器 上運作
timeoutSingle回傳一個 Single,如果來源 Single 在指定的時間段內沒有發射值,則會發出錯誤通知
toSingleSingle將發射單個項目的 Observable 轉換為發射該項目的 Single
toObservableObservable將 Single 轉換為發射 Single 發射的項目然後完成的 Observable
zipzipWithSingle回傳一個 Single,該 Single 發射將函式應用於兩個或多個其他 Singles 發射的項目所產生的項目

本頁的以下章節將提供圖表來以示意方式解釋這些運算子。此圖表解釋了如何在圖表中表示 Singles

compose

concat 和 concatWith

此運算子也有實例版本

create

delay

此運算子也有一個版本,允許您在特定的 排程器 上執行延遲

doOnError

doOnSuccess

error

flatMap

flatMapObservable

from

還有一個版本會將 排程器 作為參數:

just

map

merge 和 mergeWith

merge 的一個版本會取得發射第二個 Single 的 Single,並將其轉換為發射該第二個 Single 發射的項目的 Single

另一個版本會取得兩個或多個 Singles,並將它們合併到一個 Observable 中,該 Observable 發射來源 Singles 發射的項目(以任意順序)

observeOn

onErrorReturn

subscribeOn

timeout

如果 Timeout 在訂閱後未在指定的時間段內發射項目,Timeout 將導致 Single 中止並發出錯誤通知。其中一個版本允許您透過指定的時​​間單位數來設定此超時

您也可以為計時器指定特定的 排程器 來運作

timeout 運算子的一個版本允許您切換到備份 Single,而不是在超時到期時傳送錯誤通知

這個版本也有一個特定於 排程器 的版本

toObservable

zip 和 zipWith