原网址 https://medium.com/@andrestaltz/2-minute-introduction-to-rx-24c8ca793877
你可以看我稍早前写的 教程。觉得太长?好吧,Rx并不是太难学习,你可以访问它的官网 自己学习。
你知道数组吗?当然。如下:
[14,9,5,2,10,13,4]
如果要求你从这个固定数组中过滤掉所有奇数,该如何做?常用方法:
[ 14, 9, 5, 2, 10, 13, 4 ]
filter( (x) -> x % 2 == 0 )
[ 14, 2, 10, 4 ]
到目前为止没有什么新东西。在 underscore.js ,ECMAScript ,LINQ ,Guava ,等语言中有自带数组函数方
法。
现在让我们思考下多次单击事件后获取的坐标信息。在时间轴上画出来,大概如下图:
上图可以表示为一个 事件流(stream of events),或可称为“可观察对象(Observable)”
这些单击事件来自鼠标,所以事件流可以看做是一个固定值,因此,在定义以后这个值是不可变或者删除的。
但是,如果我只想要点击事件中 x<250的值呢?我们可以像上面所说,像处理数组那样处理点
击时间吗?如下图:
filter( (event) -> event.x < 250 )
那么 固定数组和可观察对象(Observable)有什么不同吗?并没有多不同。它们两者都可以用 map, filter, reduce。对于 可观察对象(Observable),你也可以用 merge, delay, concat, buffer, distinct, first, last, zip, startWith, window, takeUntil, skip, scan, sample, amb, join, flatMap.
可以把它看做一个异步不可变数组
Rx是一个事件型(events)的类似underscore.js的实用库。但是等等,什么是事件(event)?应用程序中的大多数内容难道不能是事件吗?
“已起用的程序”,“API调用”,“敲击键盘”,“invalidateLayout()”,“设备休眠”,等等,都是事件。
实际上任何的事情都是事件流(stream of events)。这只是组合和正确组合它们的问题。