4.Rxjs介紹及注意事項

飛凡的陀螺發表於2018-12-16

先梳理一些概念:
Rx:ReactiveX是Reactive Extensions的縮寫,一般簡寫為Rx,最初是LINQ的一個擴充套件,由微軟的架構師Erik Meijer領導的團隊開發,在2012年11月開源,Rx是一個程式設計模型,目標是提供一致的程式設計介面,幫助開發者更方便的處理非同步資料流,Rx庫支援.NET、JavaScript和C++,Rx近幾年越來越流行了,現在已經支援幾乎全部的流行程式語言了,Rx的大部分語言庫由ReactiveX這個組織負責維護,比較流行的有RxJava/RxJS/Rx.NET,社群網站是 reactivex.io

Observer 和 Observable: 在ReactiveX中,一個觀察者(Observer)訂閱一個可觀察物件(Observable)。觀察者對Observable發射的資料或資料序列作出響應。這種模式可以極大地簡化併發操作,因為它建立了一個處於待命狀態的觀察者哨兵,在未來某個時刻響應Observable的通知,不需要阻塞等待Observable發射資料。

Rxjs: 剛才說了Rx是抽象的東西,rxjs就是使用JavaScript語言實現rx介面的類庫。
它通過使用 observable 序列來編寫非同步和基於事件的程式。它提供了一個核心型別 Observable,附屬型別 (Observer、 Schedulers、 Subjects) 和受 [Array#extras] 啟發的操作符 (map、filter、reduce、every, 等等),這些陣列操作符可以把非同步事件作為集合來處理。

可以把 RxJS 當做是用來處理事件的 Lodash

ReactiveX 結合了 觀察者模式迭代器模式使用集合的函數語言程式設計,以滿足以一種理想方式來管理事件序列所需要的一切。

在 RxJS 中用來解決非同步事件管理的的基本概念是:

  • Observable (可觀察物件): 表示一個概念,這個概念是一個可呼叫的未來值或事件的集合。
  • Observer (觀察者): 一個回撥函式的集合,它知道如何去監聽由 Observable 提供的值。
  • Subscription (訂閱): 表示 Observable 的執行,主要用於取消 Observable 的執行。
  • Operators (操作符): 採用函數語言程式設計風格的純函式 (pure function),使用像 mapfilterconcatflatMap 等這樣的操作符來處理集合。
  • Subject (主體): 相當於 EventEmitter,並且是將值或事件多路推送給多個 Observer 的唯一方式。
  • Schedulers (排程器): 用來控制併發並且是中央集權的排程員,允許我們在發生計算時進行協調,例如 setTimeoutrequestAnimationFrame 或其他。

注意:網上很多例子都是基於rxjs5版本,而最新的rxjs6變化很大,具體參見中文,後面的例子我都會基於rxjs6。

建議直接看官方文件,畢竟是最新的。

學好rxjs的關鍵是對Operators (操作符)的靈活使用,操作符就是純函式,我們使用操作符建立,轉換,過濾,組合,錯誤處理,輔助操作Observables。具體參見

下節介紹如何建立 Observables


相關文章