rxjs


一、RxJS是什么

RxJS 是一個庫,它通過使用 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 (調度器): 用來控制並發並且是中央集權的調度員,允許我們在發生計算時進行協調,例如 setTimeout 或 requestAnimationFrame 或其他。

 在線demo:rxjs可視化工具

二、當下前端異步已經有async 和 promise的情況下,異步復雜到什么程度才需要使用rxjs?

 要想搞清楚這個問題,首先要知道Observable 和 Promise 的區別,大概場景有:

1.直接的場景就是前端復雜狀態管理,使用 RxJS 管理很容易,如果使用 Promise 就必須要借助第三方狀態管理的庫

那么在某些場景下區別不大,比如一個 Http 的請求,使用 RxJS Observable 比 Promise 沒有質的好處,區別就是 Observable 你不訂閱就不會請求,Promise 就是只要生成了 Promise 就會請求。

例如:

有n個ip,每個ip要ping最多x次,有y次成功即可停止。總共若有m個ip成功停止則停止其他未完成的請求。然后給出最快的這m個ip,按ping值從小到大排列。

看歷史用promise寫的代碼(promise套promise)看得腦瓜疼、胃疼、想吐,生理上的。。

改用rxjs,只需30來行輕松搞定還沒bug。

2.Rx 適合復雜的異步時間和數據流等,RxJS帶來的一個巨大好處是解耦,使用無副作用的操作符來連接各種完整的代碼邏輯,能使代碼簡潔清晰,維護也方便,

簡單的小場景用 Rx 只是自己給自己找麻煩。而且 Rx 的侵入性特別強,基本上用了之后都是 Rx 那一套東西了。不要為了 Rx 而 Rx

3.rx 是處理「流」的,不是處理「異步」的,

每個 rxjs 的 api 就是一種場景,里面 80%場景使用 promise 難以實現或者是需要寫更多的代碼才可以實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM