RxJS的另外四种实现方式(序)
栏目: JavaScript · 发布时间: 6年前
内容简介:本人自从读过一篇来自Info的受到以上的启发,我又实现了Golang的Rx库源码请关注我的github,
-
本文适合人群:了解Rx编程人士、
Javascript
发烧友
- 本文涉及概念: 响应型编程 、 NodeJs 、 函数式编程
背景
本人自从读过一篇来自Info的 《函数式反应型编程(FRP) —— 实时互动应用开发的新思路》 后便迷恋上了Rx,甚至以当时的Rxjs库移植了一套适用于Flash的AS3.0的Rx库 ReactiveFl ,也在实际开发中不断实践体会其中的乐趣。最近在知乎上无意中看到有人提到了一个名为callbag的项目,引发了我很大的兴趣,甚至翻墙观看了作者的视频 Callback Heaven - Andre Staltz 看完视频,我久久不能平静,这是多么的奇思妙想,然而当我运行了作者代码库里面的性能测试的时候,另一个不为人所知的库出现了,叫做Most。这个库性能了得,远远超过同类的库,然后我就想是否可以结合两者的优势,创造出性能高超,但设计巧妙又通俗易懂的Rx库呢?于是我做了如下的尝试:
RxJs的四种实现方式
-
实现代码最小的库(受callbag启发)
-
性能最好的库(参考了Most)
-
利用js的生成器实现的库(突发奇想)
-
扩展Nodejs的Stream类实现的库(受Event-Stream的启发)
受到以上的启发,我又实现了Golang的Rx库
源码请关注我的github, https://github.com/langhuihui
Rx实现的关键功能
要实现一个Rx库,关键在于实现数据的推送以及消费过程中的四个基本功能:
-
订阅:即激活Rx数据流的每一个环节,生产者此时可以开始发送数据(某些生产者并不关心是否有人订阅)
-
发送/接受 数据:生产和消费的核心功能
-
完成/异常:由生产者发出的事件
-
取消订阅: 由消费者触发终止数据流,回收所有资源
生产者 (*)-------------(o)--------------(o)---------------(x)----------------|> | | | | | Start value value error Done 消费者 (*)-------------(o)--------------(o)---------------(x)----------------|> | | | | | Subscribe onNext onNext onError onComplete
上述过程中,如果用户调用了unSubscribe/Disopse的方法,就可以中断,从而不再触发任何事件
Rx的两种书写模式
-
链式编程
-
管道模式
本人利用js的Proxy类,实现了一个库同时实现两种书写模式的解决方案,我会在后续的文章中解释其中的原理。
(未完待续)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python for Data Analysis
Wes McKinney / O'Reilly Media / 2012-11-1 / USD 39.99
Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing d......一起来看看 《Python for Data Analysis》 这本书的介绍吧!