维基百科:
响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式。javascript
对于响应式编程,不一样语言都有相应的扩展库。例如RxJava、RxAndroid、RxJS等等。java
官网:
An API for asynchronous programming with observable streams 用于使用可观察流进行异步编程的APIgit
我的理解:
建立出数据流(事件流),使用操做符对数据流进行组合和转换,订阅此数据流来执行其余功能。或者说监听到数据流后来执行其余功能。github
关键词:数据流、操做符、订阅、异步编程编程
Reactive Extension,也叫ReactiveX,或者简称Rx,指的是实践响应式编程的一套工具(库)。 改进了异步编程模型。 开发语言并无天生对响应式编程支持,因此须要对编程语言作一层功能扩展。安全
例如:RxJava、RxJs、RxAndroid数据结构
它对观察者模式进行了扩展,以支持数据和(或)事件序列;并添加许多运算符,这些运算符能够以声明方式组合;同时抽象出对如下问题的关注:低级线程,同步,线程安全,并发数据结构和非线程等。并发
响应式编程结合了以下三种优秀的思想:异步
下面重点说一下函数式编程async
函数式编程就是很是强调使用函数来解决问题的一种编程方式。
此处的函数有特殊的要求:
//命令式:告诉计算机该怎么作
function double(arr) {
const results = []
for (let i = 0; i < arr.length; i++){
results.push(arr[i] * 2)
}
return results
}
//声明式:告诉计算机作什么
function double(arr) {
return arr.map(function(item) {
return item * 2
});
}
复制代码
函数的执行过程彻底由输入参数决定,不会受除参数以外的任何数据影响。 函数不会修改任何外部状态,如修改全局变量或传入的参数对象。
const array = [1, 2, 3];
const newArray = double(array);
//array 的值是[1,2,3]
//newArray 的值是[2,4,6]
const originalArray = [1, 2, 3];
const pushedArray = arrayPush(originalArray, 4);
const doubledPushedArray = double(pushedArray);
// pushedArray值应该是[ 1, 2, 3, 4 ]
// doubledPushedArray值应该是 [ 2, 4, 6, 8 ]
const doubleOriginArray = double(originalArray);
//doubleOriginArray值应该是 [ 2, 4, 6, 8 ]; originalArray被arrayPush方法修改了。
//再看arrayPush代码,显然不是一个纯函数
function arrayPush (arr, newValue) {
arr.push(newValue);
return arr;
}
//修改以下
function arrayPush (arr, newValue) {
return [...arr, newValue];
}
复制代码
程序中的数据天然是须要变化的。这里的不可变性是指保持原有数据不变。 当咱们须要数据状态发生改变时,保持原有数据不变,产生一个新的数据来体现这种变化。
可以遍历一个数据集合的对象。就是提供一个通用的接口,让使用者彻底不用关心这个数据集合的具体实现方式。
const iterator = getIterator();
while (iterator.isDone()) {//是否遍历完全部元素
console.log(iterator.getCurrent());//获取当前游标所指向的元素
iterator.moveToNext ();//将游标移动到下一个元素
}
复制代码
数据流抽象了不少现实问题。 擅长处理异步操做。 把复杂问题分解成简单问题的组合。