響應式的操作

引言

每個實現響應式編程的語言都實現一個操作集。雖然各個實現有重疊,但是有些操作只在特定實現中才有。同時,每個實現傾向於將操作的名稱命名爲其他語言廣爲人知的相似方法。(英文原文
)

鏈式操作

大多數操作作用在Observable上並且返回一個新Observable。這允許你像鏈條一樣一個接一個的使用這些操作。鏈中的每個操作修改上一個操作傳過來的Observable,
存在其他的模式,比如建造者模式,這種模式中特定類的多個方法操作這個類的相同對象實例。這些模式也能夠讓你使用相似的方式串聯方法。然而在建造者模式中,連中的方法順序不是一個關注問題,相比較Observable的操作卻是一個關注點。

Observable操作鏈不是獨立的作用於最開始的Observable,而是依次操作,每個操作作用到上一個操作生成的Observable。

相應式的操作

本頁首先列出在響應式中被認爲的“核心”操作,並且這些操作被鏈接到更多信息頁,這些頁描述操作式如何工作和特定語言的相應式版本如何實現這些操作。

接下來是“決策樹”,他能夠幫助你選擇適合你用例的操作。

最後,這裏列出了許多實現了響應式的語言的操作字母列表。這些列表鏈接到了核心操作的文獻頁(例如,Rx.NET “SelectMany” 操作鏈接到響應式FlatMap 操作的文獻。)。

如果你想要實現自己的操作,請查看 “Implementing Your Own Operators”。

內容
1.操作分類
2.Observable操作決策樹
3.Observable操作字母列表

操作分類

創建Observable

初始的新Observable操作

Create - 程序性從頭開始調用觀察者方法來創建Observable
Defer - 直到觀察者訂閱後才創建Observable ,並且是給每一個觀察者創建一個新的Observable 。
Empty/Never/Throw - 創建精確且受限行爲的Observable 。
From - 將其他對象或數據結構轉換爲一個Observable 。
Interval - 創建一個彈出以確定的時間間隔的整數Observable 。
Just - 將對象或對象集轉換爲Observable ,Observable會彈出這些對象。
Range - 創建一個彈出指定範圍內的整數的Observable 。
Repeat - 創建重複彈出特定數據項或數據序列的Observable 。
Start - 創建彈出函數返回值的Observable 。
Timer - 創建 指定時間後彈出單個數據項的Observable 。

變換Observable

變換Observable 彈出的數據項的操作

Buffer - 間斷性的收集來自Observable的數據合成包裹,並且彈出這些包裹,而不是一次彈出一個數據。
FlatMap - 轉換轉換數據項爲Observable,然後撫平這些數據到單個Observable。
GroupBy - 將原Observable彈出的數據安照關鍵字分組,分組後的數據形成新的Observable。
Map - 使用一個函數將Observable彈出的每個數據項轉換其他形式。
Scan - 使用一個函數處理Observable彈出的數據並且逐個的彈出處理後的值。
Window - 間隔性的分割observable數據項爲Observable窗口 並將這些窗口發送出去。

Observable 過濾

上游Observable彈出的數據選擇性的發送操作。
Debounce - 只有過去了一段特定的時長後才發出一個數據項。
Distinct - 去除Observable中重複的數據項。
ElementAt - 只彈出Observable中第n個數據項。
Filter - 只彈出那些通過斷言測試的數據項。
First - 只彈出第一個數據項,或者符合條件的第一個數據項。
IgnoreElements - 不彈出任何數據項但是會映射終止通知。
last - 只彈出最後一個數據項。
Sample - 在特定的時間間隔內只彈出最新的數據項。
Skip - 去除前n個數據項。
SkipLast - 去除Observable中後N個數據項。
Take - 只彈出Observable中前N個數據項。
TakeLast - 只彈出Observable中後N個數據項。

連接Observable

作用於多個Observable創建單個Observable的炒作

And/The/When - 通過Pattern 和 Plan中介的方式連接多個Observable的數據集
CombineLatest - 當兩個Observable之一發射一個項目時,通過指定的函數組合每個 Observable 發射的最新項目,並根據此函數的結果發射項目。
Join - 在根據另一個Observable所發射的項目定義的時間窗口中,只要發射了一個Observable的項目,就組合兩個Observable發射的項目
Merge - 通過合併他們的發射數據來合併2個Observab。
StartWith - 在發射源Observable數據項前先發射一個特定的數據序列。
switch - 將發出Observable的Observable轉換爲發出可觀察到的最新事物的單個Observable
Zip - 通過特別的函數合併多個Observable發送的數據,彈出後的數據是基於這個函數的結果合併後的一個單個數據。

錯誤處理操作

從Observable的錯誤通知中恢復的操作

catch - 從 onError 通知恢復繼續數據序列
retry - 如果數據原 Observable 發送 onError 通知,重新訂閱以無錯誤期完成。

Observable 的工具操作

Observable協同的有用的操作工具箱

delay - 延遲 Observable的數據發送
Do - 註冊一個回調動作作用於 Observable 的各種生命週期事件
Materialize/Dematerialize - 代表包裝或解包裝後數據項和通知。
ObserveOn - 指定 observer觀察者在哪個調度器上觀察 Observable。
Serialize — 強制 Observable 產生序列化調用,併產生可期的行爲(彈出的數據是順序的),
Subscribe - 作用到 Observable 彈出數據項和通知。
SubscribeOn - 指定 Observable被訂閱後 它所使用的調度器。
TimeInterval - 收集 Observable 在一段時間內的彈出項爲一個數據項進行再次發射。
TimeOut - 當一段時間內沒有發射數據項時發佈一個錯誤通知。
Timestamp - 給每一個彈出數據項添加一個時間戳。
Using - 創建一個類似於 Observable 壽命的可丟棄的數據源。

條件和布爾邏輯操作

判斷Observables發射的一個或多個Observables或數據項的操作。
All - 判斷Observables彈出的全部數據項是否都滿足某個標準。
Amb - 給定了2哥或以上的Observables數據源只彈出第一個Observables的發射數據。
Contains - 判斷Observables發射的數據項是否含有某個數據。
DefauIfEmpty - 如果源Observables不爲空,發射源Observable的數據項,否則發射一個默認的數據項。
SequenceEqual - 判斷2個Observable的數據項序列是否相同。
SkipUntil - 丟棄Observables發射的數據直到第二個Observable發射了數據。
SkipWhile - 丟棄Observables發射的數據直到條件不成立。
SkipUntil - 丟棄Observables發射的數據直到第二個Observable發射數據或者結束。
TakeWhile - 當條件不成立後丟棄Observables發射的數據。
算數和聚合操作
對整個Observable的數據項進行操作
Average - 計算Observable發射數據項的平均值並將此值發射。
Concat - 以不間隔2個或以上的Observable數據項的形式重新發射數據項,即拼接多個Observable的數據項。
Count - 計算Observable發射的數據項的總數目,併發射這個數目。
Max - 判斷Observable的最大數據項併發射這個最大數。
Reduce - 使用一個函數處理Observable每個數據項,並彈出最後的值。
Sum - 計算Observable發射的數據項的和,併發射這個和。

背壓操作

Backpressure Operators - 解決觀察者處理數據的速度慢於發射數據的速度。

連接Observable操作

具有更精確控制的訂閱動態的專業Observable
Connect - 指示可連接Observable開始發射數據給它的訂閱者。
Publish - 轉化普通Observable到可連接Observable。
RefCount - 將可連接Observable變換爲普通Observable。
Replay - 讓所有觀察者能看到相同的數據序列,即使訂閱者是在Observable已經發射數據後才訂閱。

轉變Observable操作

To - 將Observable轉化爲其它對象或數據結構。

Observable操作決策樹

是一棵幫助你尋找響應式Observable操作的樹
我要創建一個新的Observable
…它發射一個特定的數據項:Just
…它在訂閱時調用函數後返回:start
…它在訂閱時調用Action,Callable,Runnable後返回:From
…經一段延遲:Timer
…它從一個特定的 Array, Iterable中拿出數據,或類似的情況:From
…通過在未來遍歷:start
…在未來獲取序列:From
…重複發射它的數據項:Repeat
…以用戶邏輯抓取數據:Create

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章