中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RxJS的另外四種實現方式(序)

發布時間:2020-08-04 07:05:12 來源:網絡 閱讀:274 作者:一個灰 欄目:web開發
  • 本文適合人群:了解Rx編程人士、Javascript發燒友
  • 本文涉及概念:響應型編程NodeJs函數式編程

背景

本人自從讀過一篇來自Info的《函數式反應型編程(FRP) —— 實時互動應用開發的新思路》后便迷戀上了Rx,甚至以當時的Rxjs庫移植了一套適用于Flash的AS3.0的Rx庫ReactiveFl,也在實際開發中不斷實踐體會其中的樂趣。最近在知乎上無意中看到有人提到了一個名為callbag的項目,引發了我很大的興趣,甚至×××觀看了作者的視頻Callback Heaven - Andre Staltz看完視頻,我久久不能平靜,這是多么的奇思妙想,然而當我運行了作者代碼庫里面的性能測試的時候,另一個不為人所知的庫出現了,叫做Most。這個庫性能了得,遠遠超過同類的庫,然后我就想是否可以結合兩者的優勢,創造出性能高超,但設計巧妙又通俗易懂的Rx庫呢?于是我做了如下的嘗試:

RxJs的四種實現方式

  1. 實現代碼最小的庫(受callbag啟發)
  2. 性能最好的庫(參考了Most)
  3. 利用js的生成器實現的庫(突發奇想)
  4. 擴展Nodejs的Stream類實現的庫(受Event-Stream的啟發)

    受到以上的啟發,我又實現了Golang的Rx庫
    源碼請關注我的github,https://github.com/langhuihui

Rx實現的關鍵功能

要實現一個Rx庫,關鍵在于實現數據的推送以及消費過程中的四個基本功能:

  1. 訂閱:即激活Rx數據流的每一個環節,生產者此時可以開始發送數據(某些生產者并不關心是否有人訂閱)
  2. 發送/接受 數據:生產和消費的核心功能
  3. 完成/異常:由生產者發出的事件
  4. 取消訂閱: 由消費者觸發終止數據流,回收所有資源
生產者
(*)-------------(o)--------------(o)---------------(x)----------------|>
 |               |                |                 |                 |
Start          value            value             error              Done
消費者
(*)-------------(o)--------------(o)---------------(x)----------------|>
 |               |                |                 |                 |
Subscribe      onNext           onNext            onError         onComplete

上述過程中,如果用戶調用了unSubscribe/Disopse的方法,就可以中斷,從而不再觸發任何事件

Rx的兩種書寫模式

  1. 鏈式編程
  2. 管道模式

本人利用js的Proxy類,實現了一個庫同時實現兩種書寫模式的解決方案,我會在后續的文章中解釋其中的原理。
(未完待續)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郯城县| 贞丰县| 崇文区| 岳阳市| 潜江市| 麦盖提县| 页游| 连江县| 石河子市| 繁昌县| 北海市| 邢台县| 库伦旗| 东方市| 铅山县| 化州市| 巴东县| 明溪县| 桐乡市| 克东县| 灯塔市| 高邑县| 岚皋县| 渝中区| 曲松县| 萍乡市| 宁蒗| 雅安市| 原阳县| 营口市| 安宁市| 明溪县| 同德县| 池州市| 都江堰市| 衡阳市| 闻喜县| 纳雍县| 和静县| 安阳市| 祁阳县|