什么时候响应式编程

一句话概括就是用异步数据流来编程

从某种程度上讲,一个点击事件就是一个异步事件流,我们可以注册监听然后再做一些其他的事情。正是这样我们就应该有一个工具包来创建,组合,过滤这些流。一个流或者多个流可以作为另一个流的输入,可以合并这两个流,并且能够过滤这些流得到你想要的流,能够把流推送到另一个新的流。这些就是响应式编程要做的事情

监听一个流我们称之为“订阅”(Subscription),我们定义的功能是“观察者”(Observer),流就是我们的“可观察”对象(Observable ),对流的操作就是Operators

响应式编程的优点

它是声明式的、可组合的,以及不可变的,这避免了回调地狱,让你的代码更加简洁、可复用以及模块化

RxJS

引用官方的一句话来说明RxJS是什么
RxJS就是响应式编程的一个变种

RxJS 是一个库,它通过使用 observable 序列来编写异步和基于事件的程序。

这里面主要说明了两点:1、可观察的序列,2、解决异步编程

Observable

可观察的序列我们可以想想成可观察的数据流。流的引申义是物质在库与库之间的转移运行。那么数据流则是数据随时间从输入到输出中间所经历的一系列的过程。比如:在web中用户做了一次点击,然后页面渲染出数据这个过程应该是清晰明了不被污染的。
可以看一个官方的例子:

var count = 0;
var rate = 1000;
var lastClick = Date.now() - rate;
var button = document.querySelector('button');
button.addEventListener('click', () => {if (Date.now() - lastClick >= rate) {console.log(`Clicked ${++count} times`);lastClick = Date.now();}
});

在一秒钟内只能执行一次的代码实现

再看RxJS


var button = document.querySelector('button');
Rx.Observable.fromEvent(button, 'click').throttleTime(1000).scan(count => count + 1, 0).subscribe(count => console.log(`Clicked ${count} times`));

相比之下rxjs实现的部分代码更加已读更加干净更加优雅。你可以很清晰的看到值的转换过程。这也是RxJS核心的一部分
一个 observable 就是一个伴随着时间流动的数据集合。

Callback hell

写过js的都知道js是动态类型的语言,他天生异步,非常的灵活。但这也是他的缺点,多变不好控制。回掉能让你做很多事情同样实现复杂的逻辑时可读性会变得很差。后面有了promise,但promise的可控性并不好。RxJS是结合了 观察者模式迭代器模式使用集合的函数式编程,以满足以一种理想方式来管理事件序列所需要的一切

  1. RxJS它在处理任何类型的异步数据上都很有用,无论是获取数据、通过 WebSockets 通信或从多个源头监听外部事件,还是动画。
    你使用 Observable 和操作符声明式地表示你想要的数据,然后在一个单独的.subscribe()里处理业务逻辑,避免代码上的污染
  2. Rx *库系列可广泛用于多种语言和平台(.NET,Java,Scala,Clojure, JavaScript,Ruby,Python,C ++,Objective-C / Cocoa,Groovy等
  3. RxJS可以跟很多流行框架(比如 React,Angular 和 Vue)一起工作
  4. 其实 RX 最早在接近十年以前(2009)被实现,从 Conal Elliott 和 Paul Hudak 二 十年以前(1997)的想法中被提出,这个想法描述的是函数式响应式动画。所以不用说,可以完全放心使用它是经过考验的。

这里对RX的介绍只是冰山一角,更多的资料参考[官方文档
](http://reactivex.io/rxjs/)

通过RxJS理解响应式编程相关推荐

  1. 理解响应式编程(RxJS)

    2019独角兽企业重金招聘Python工程师标准>>> 概念 学习angular2以上版本,或多或少会接触到Observable.subscribe等东西,本来打着用会Rx的API就 ...

  2. 走进JavaScript响应式编程(Reactive Programming)

    或许"响应式布局"这个名单大家都听过或者都自己实现过,那么"响应式编程"是什么呢?下面我们来具体聊一聊. 我的理解 从字面意思上我们可以大致理解为:所有的事件存 ...

  3. 赠书:响应式编程到底是什么?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 最近几年,随着Go.Node 等新语言.新技术的出现,J ...

  4. 还搞不明白“响应式编程”,那得看这篇

    响应式编程详解 响应式编程是一种基于异步数据流驱动.响应式.使用声明式范式的编程模型,需要遵循一定的响应式编程开发规范,并且有具体的类库实现.响应式编程基于数据流而不是控制流进行业务逻辑的推进. 响应 ...

  5. 【响应式编程的思维艺术】 (5)Angular中Rxjs的应用示例

    [摘要] Rxjs在angular中的基本应用 本文是[Rxjs 响应式编程-第四章 构建完整的Web应用程序]这篇文章的学习笔记. 示例代码托管在:http://www.github.com/das ...

  6. 【响应式编程的思维艺术】 (4)从打飞机游戏理解并发与流的融合

    [摘要]本文是Rxjs 响应式编程-第三章: 构建并发程序这篇文章的学习笔记. 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 划重点 尽量避免外 ...

  7. 【响应式编程的思维艺术】 (1)Rxjs专题学习计划

    [摘要] 请暂时忘掉你的对象,感受一切皆流的世界. 一. 响应式编程 响应式编程,也称为流式编程,对于非前端工程师来说,可能并不是一个陌生的名词,它是函数式编程在软件开发中应用的延伸,如果你对函数式编 ...

  8. RxJS——异步数据流的响应式编程库(适合新手入门)

    文章目录 RxJS概述 Redux VS RxJS RxJS核心概念解析 热观察和冷观察 merge/combine合流 RXJS6 的变化 RxJS概述 RxJS 全称 Reactive Exten ...

  9. 我对响应式编程中Mono和Flux的理解

    1. 前言 很多同学反映对响应式编程中的Flux和Mono这两个Reactor中的概念有点懵逼.但是目前Java响应式编程中我们对这两个对象的接触又最多,诸如Spring WebFlux.RSocke ...

最新文章

  1. Java项目:学生信息管理系统(java+SSM+jsp+mysql+maven)
  2. 跟郎朗媳妇有得一拼的AI,只看弹琴动作,完美复现原声 | CVPR 2020
  3. python3.7安装numpy模块-CENTOS7 Python3.7安装numpy
  4. Sourceforge.net速度快的镜像 [zt]
  5. SpingMVC类型转换
  6. 车窗上为啥总有一些小黑点?没想到居然藏着大作用!
  7. Please let us know in case of any issues
  8. 单点登陆(SSO)组件的设计与实现一 【转】
  9. linux下如何添加一个用户并且让用户获得root权限
  10. 编译OpenJDK8:Target CPU mismatch. We are building for x86_64 but CL is for ; expected x64
  11. mysql 命令创建一个用户名和密码_Mysql的进入数据库指令和创建新用户密码的介绍...
  12. 大小端及转换(C++)
  13. 银行业务头条体系推广
  14. 《游戏系统设计一》游戏任务系统太复杂,带你一步一步实现
  15. Burp Suite使用介绍
  16. Mysql中索引相关问题
  17. 京东云主机使用-搭建简单网页(macOS)
  18. IF:11+ 鳞癌基因标记预测肺腺癌患者的预后和免疫治疗的敏感性
  19. openssh8.3p1 RPM 升级
  20. air dots 配对_Redmi AirDots可以作为iphone的合格伴侣吗?

热门文章

  1. 如何设置xshell代理?
  2. PPT转换PDF格式怎么转换?后悔现在才知道
  3. Linux 基金会与 RISC-V 基金会合作推广开源芯片
  4. python异常值处理实例_python-异常值:(“ 08001”,“ [08001] [unixODBC]...
  5. 苹果xsmax是什么接口_为什么苹果PD快充线头是银色而非金黄色?原来那根本就不是镀的银...
  6. OBJ文件格式分析工具: objdump, nm,ar
  7. android天气预报----google开源天气API,SAX解析
  8. Wanna Be a Pragmatic Programmer
  9. ElasticSearch Client详解
  10. 原型模式-prototype