RxJava 學習筆記<十八> Delay延遲

    顧名思義,將推遲在指定時間內發出的值。有兩種方法能夠作到這一點。一種是存儲值,直到您準備好發射它們爲止。另外一種是將訂閱延遲。ios

    最簡單的Delay實現會使每一個值延遲相同的時間。您能夠將其視爲延遲序列的開始,同時保持連續元素之間的時間間隔。git

日誌輸出:github

    咱們建立了間隔100毫秒的5個值,而後咱們將序列延遲了1秒。咱們能夠看到第一個值須要〜(1000 + 100)ms,下一個值每一個須要100ms。函數

    您還能夠單獨延遲每一個值。spa

    此重載採用一個函數,該函數將爲每一個項建立一個observable。當該observable發出onNext時,相應的項目將以延遲的順序發出。這是一些代碼:3d

    日誌輸出:日誌

    

    初始序列間隔100ms,結果確爲200ms。若是你還記得,間隔會發出數字i = 1,2,3等。咱們將每一個項目延遲i * 100,所以第一項延遲100ms,而後第二項延遲200ms,第三項延遲300ms。連續延遲之間的差別是100ms。添加到初始100毫秒間隔,致使項目間隔200毫秒。blog

delaySubscription    

    您能夠徹底延遲訂閱,而不是存儲值並在之後發佈它們。根據觀察結果是熱仍是冷,這將產生不一樣的效果。這將在熱和冷的observables章節中進行更多討論。對於咱們到目前爲止的示例,可觀察量是冷的,訂閱事件是在建立源可觀察量時(即序列的開始)。這意味着在將每一個項目延遲相同數量並延遲訂閱之間的順序沒有區別。因爲這是這種狀況,延遲訂閱更有效,由於操做員不須要在內部緩衝項目。事件

日誌輸出:ip

    咱們在這裏看到的是間隔可觀察(即其建立)的訂閱被延遲了1000ms。以後,序列按照定義進行。

    您還能夠經過如下重載基於信號可觀察來延遲訂閱:

    該參數是一個函數,它將爲每一個訂閱建立一個新的observable。訂閱被延遲,直到相應的observable發出一個值。如下示例等同於咱們剛剛看到的示例。

日誌輸出:

delay values and subscription

    此類別中的最後一種方法容許您單獨延遲訂閱和每一個項目。

    這結合了咱們已經看到的兩種延遲變體。第一個參數是一個函數,它建立一個observable,用於指示什麼時候執行訂閱。第二個參數採用每一個項目並決定應該延遲多長時間。

原文:https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%203%20-%20Taming%20the%20sequence/5.%20Time-shifted%20sequences.md

下節繼續!

有什麼討論的內容,能夠加我公衆號:

相關文章
相關標籤/搜索