原文地址:https://medium.com/@andrestaltz/2-minute-introduction-to-rx-24c8ca793877

翻译去掉了一些口水话(⊙o⊙)

诸位应该已经读过我的前端时间写过的入门教程了。太长不看?好吧。Rx没那么难,你可以自己实现一遍。

这里有一个数组:

[14, 9, 5, 2, 10, 13, 4]

假设这是一个immutable(不可变)的数组,你需要去除所有的奇数,你会怎么做?这里有一个流行的办法:

[14, 9, 5, 2, 10, 13, 4]
filter((x) -> x%2 == 0)
[14, 2, 10, 4]

到目前为止,没有什么新概念。这个过滤方法在underscore.js, ECMAScript 5.1, LINQ, Guava等中都有提供。

————分割线————————

现在来思考一下点击事件,每次点击,记录对应的位置信息。把它们绘制到时间线上,将会如下图所示。



这个,一系列的事件流,别称就是“Observable”。

鼠标触发了点击事件,所以事件流一直是不可变的,这个情境下,一旦产生这个事件,无法添加或者删除它。

但是如果我只对x<250的事件感兴趣,我们不能就想过滤数组一样,新建一个过滤流吗?

filter( (event) -> event.x < 250 )

就如下图所示:



现在再看不可变数组和Observables,它们之间没有那么多不同。这两者,你都可以map,filter,reduce。对于Observables,你还能使用merge,delay,concat,buffer,distinct,first,last,zip,startWith,window,takeUntil,skup,scan,sample,amb,join,flatMap。

具体看这里:方法汇总-中文文档

把Observalbes看成是一个异步不可变数组即可。

Rx之于事件,就像是underscore.js之于数组。等一下,什么是事件?在你的应用中,还有什么可以被称为一个事件?

事件"application started", 事件"API response arrived", 事件 "keyboard key pressed", 事件 "invalidateLayout()", 事件 "device slept", 等等。

事实上,几乎所有事件都能被看做是事件流,剩下的事情就是正确的排列组合它们。

(完)

【译】2分钟介绍Rx的更多相关文章

  1. [译]ABP vNext介绍

    译者注 ASP.NET Boilerplate是.Net平台非常优秀的一个开源Web应用程序框架,在国内也有大量的粉丝. 近日, 本人在github上闲逛, 发现ASP.NET Boilerplate ...

  2. 十分钟介绍mobx与react

    原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...

  3. [译] AR SDK的种类比你想得要多!这里介绍七个棒棒哒

    作者:Eddie Offermann 原文:There are dozens more Augmented Reality SDKs than you think! Here are seven gr ...

  4. Rxjava2 介绍与详解实例

    目录 前言 RX介绍 Rx模式 Rx使用依赖: Rxjava的入门基础 1. Observable 2. Flowable 3. Single 4. Completable 5. Maybe 6. S ...

  5. R基本介绍

    一.基本介绍:1. 警告:在输入命令前请切换到英文模式.否则你的一大段代码可能因为一个中文状态的括号而报错,R语言的报错并不智能无法指出错误的具体位置.最可怕的是不报错但就是无法输出正确结果.2. 警 ...

  6. 使用响应扩展的响应面(Rx)

    下载demo - 196 KB 下载source - 98 KB 表的内容 系统要求反应面一个简单的计时器从事件中收集数据序列使用更复杂的查询订阅您希望完成的面最终考虑历史 介绍 "Rx&q ...

  7. 在Linux中安装和配置OpenVPN Server的最简便方法!

    本文介绍了如何在基于RPM和DEB的系统中安装和配置OpenVPN服务器.我们在本文中将使用一个名为openvpn-install的脚本,它使整个OpenVPN服务器的安装和配置过程实现了自动化.该脚 ...

  8. Reactive Extensions入门

    https://www.cnblogs.com/yangecnu/archive/2012/11/03/Introducting_ReactiveExtensions.html 前面我写过7篇文章粗略 ...

  9. Webform Session Cookies状态保持

    Request对象的五个集合: ①.QueryString:用以获取客户端附在url地址后的查询字符串中的信息. 例如:stra=Request.QueryString ["strUserl ...

随机推荐

  1. package.json中版本理解

    一个完整的版本号可以理解为: [主要版本号,次要版本号,补丁版本号]版本号 x.y.z :其中z 表示一些小的bugfix, y表示一些大的版本更改,比如一些API的变化x表示一些设计的变动及模块的重 ...

  2. iview中关于table组件内放入Input会失去焦点

    table里面的数据是一个数组,父组件传入的.子组件是截图的内容.当每个input框数据发生变化时,把数据传给父组件.在父组件做表单的提交. github内已经提到过这个问题(https://gith ...

  3. Idea15 常用设置(一):JDK、SVN

      1:显示行号  File->Settings->General->Appearance 2: 代码自动补齐即使是小写字母也会弹出代码补齐提示     3:自动编译 设置 4: 设 ...

  4. OA电子表单设计-年假申请单-数据验证

    OA从年初上线到现在已经过去半年了,时光飞逝. 上月底,行政文员找到我,说最近有新来的部门文员填<年假申请单>时,有乱填的情况,让我想办法处理. 我一查还真是,这文员是个男的,同一天给同一 ...

  5. Page Cache的落地问题

    除非特别说明,否则本文提到的写操作都是 buffer write/write back. 起因 前几天讨论到一个问题:Linux 下文件 close成功,会不会触发 “刷盘”? 其实这个问题根本不用讨 ...

  6. idea maven 依赖问题

    今天发现,原来idea引用maven依赖的时候,优先依赖的是本地.但是有个问题,如果我删除了一个packet,如果刚刚好本地另外一个项目里面也有这个对于的packet,idea的智能提示 是 将其导入 ...

  7. Dapper进行增删改查 z

    http://www.cnblogs.com/huangkaiyan10/p/4640548.html 项目背景 前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET ...

  8. 【Leetcode】【Medium】Populating Next Right Pointers in Each Node

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  9. 属性锁TimeLock

    属性锁TimeLock 这是本人所写的几个类,用于对属性设置值时进行锁定与解锁,适用于高逼格动画当中. 源码: TimeLock.h 与 TimeLock.m // // TimeLock.h // ...

  10. python全栈学习笔记(二)网络基础之子网划分

    阅读目录 一.ip地址基本知识 1.1 ip地址的结构和分类 1.2 特殊ip地址 1.3 子网掩码 1.4 ip地址申请 二.子网划分 2.1 子网划分概念 2.2 c类子网划分初探 2.3 子网划 ...