发表于: 2017-06-21 23:19:01
0 1129
今天完成:
准备小课堂:如何理解RxJS
一、背景介绍
rxjs全名Reactive Extensions for JavaScript,Javascript的响应式扩展, 响应式的思路是把随时间不断变化的数据、状态、事件等等转成可被观察的序列(Observable Sequence),然后订阅序列中那些Observable对象的变化,一旦变化,就会执行事先安排好的各种转换和操作 **rxjs适用于异步场景,即前端。
二、知识剖析
1、RxJS · 流 Stream
RxJS 是 Reactive Extensions for JavaScript 的缩写,起源于 Reactive Extensions,是一个基于可观测数据流在异步编程应用中的库。RxJS 是 Reactive Extensions 在 javascript 上的实现,而其他语言也有相应的实现,如 RxJava、RxAndroid、RxSwift 等。学习 RxJS,我们需要从可观测数据流(Streams)说起,它是 Rx 中一个重要的数据类型。
下雨天时,雨滴随时间推移逐渐产生,下落时对水面产生了水波纹的影响,这跟 Rx 中的流是很类似的。而在 Web 中,雨滴可能就是一系列的鼠标点击、键盘点击产生的事件或数据集合等等。

2、RxJS 基础实现原理简析:
观察者模式
观察者模式在 Web 中最常见的应该是 DOM 事件的监听和触发。
订阅:通过 addEventListener 订阅 document.body 的 click 事件。
发布:当 body 节点被点击时,body 节点便会向订阅者发布这个消息。
document.body.addEventListener('click', function listener(e) {
console.log(e);
},false);
document.body.click(); // 模拟用户点击

迭代器模式
迭代器模式可以用 JavaScript 提供了 Iterable Protocol 可迭代协议来表示。Iterable Protocol 不是具体的变量类型,而是一种可实现协议。JavaScript 中像 Array、Set 等都属于内置的可迭代类型,可以通过 iterator 方法来获取一个迭代对象,调用迭代对象的 next 方法将获取一个元素对象。
RxJS 的观察者 + 迭代器模式
RxJS 中含有两个基本概念:Observables 与 Observer。Observables 作为被观察者,是一个值或事件的流集合;而 Observer 则作为观察者,根据 Observables 进行处理。
Observables 与 Observer 之间的订阅发布关系(观察者模式) 如下:
订阅:Observer(对象) 通过 Observable 提供的 subscribe() 方法订阅 Observable。
发布:Observable(函数) 通过回调 onNext 方法向 Observer 发布事件。
三、常见问题
RxJS 基础实现
四、解决方案 编码实战
创建 Observable
RxJS 提供 create 的方法来自定义创建一个 Observable,可以使用 onNext 来发出流。
var Observable = Rx.Observable.create(observer => {
observer.onNext(2);
observer.onCompleted();
return () => console.log('disposed');
});
创建 Observer
Observer 可以声明 next、err、complete 方法来处理流的不同状态。
var Observer = Rx.Observer.create(
x => console.log('Next:', x),
err => console.log('Error:', err),
() => console.log('Completed')
);
最后将 Observable 与 Observer 通过 subscribe 订阅结合起来。
var subscription = Observable.subscribe(Observer);
私密性的信息请求使用post。
查询信息和可以想要通过url分享的信息使用get。
五、扩展思考
什么情况下考录使用RxJS
信息量较大,导致查询较复杂,其中有部分数据是可复用的,比如说,这么一大片面板,可能几百条任务,但是其中人员可能就20个,所有参与者都在这20个人里面。
如果要做一些比较实时的交互,会比较麻烦,比如说,某个用户修改了头像,某个标签定义修改了文字,都会需要去立刻更新当前界面所有的引用部分。
六、参考文献
七、更多讨论
如何准确的理解流?
明天计划:
复盘,
遇到困难:
准备小课的时候发现这个库还需要ng2的知识,感觉自己会的太少了,
还有ES6的相关知识。。。
完全不会
收获:
了解了RxJS的概念,
对流和observe有了一定的了解
评论