Christian-Yang / Translate-and-save

Translate and save for my self
1 stars 0 forks source link

构建流式应用—RxJS详解 笔记 #3

Open Christian-Yang opened 7 years ago

Christian-Yang commented 7 years ago

这是<<构建流式应用—RxJS详解>>的阅读笔记,原文地址:https://github.com/joeyguo/blog/issues/11?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
RxJava的资料:https://mcxiaoke.gitbooks.io/rxdocs/content/operators/FlatMap.html
官方RxJS的API查询(全):http://reactivex.io/documentation/operators.html

好的电子书: gitbook : https://www.gitbook.com/@buctwbzs

参考资料

rxjs官网 - http://reactivex.io/rxjs/ rxjs代码 - https://github.com/ReactiveX/rxjs 常用rxjs方法的交互图 - http://rxmarbles.com/ rxhjs教程 - http://xgrommx.github.io/rx-book/content/observable/observable_instance_methods/toarray.html Scheduler - https://mcxiaoke.gitbooks.io/rxdocs/content/Scheduler.html 原文地址:https://yq.aliyun.com/articles/65027

感谢前辈的积累。

1filename 2filename 3filename q1 q2 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 注意这里的switch-map操作,可以参考这个RxJava的文档,来理解: RxJava还实现了switchMap操作符。它和flatMap很像,除了一点:当原始Observable发射一个新的数据(Observable)时,它将取消订阅并停止监视产生执之前那个数据的Observable,只监视当前这一个。
这个东西的意思是,下面的图中,第三个图,A会产生一个事件流a1,a2,B会产生一个事件流b1,b2, 所以当使用switchMap函数的时候,当A产生一个a1的时候,这个a1值被归入到总轴上面了,然后B出现了并且产生了一个b1,那么按照前面的定义,这个时候由于Observable B发射了一个新的数据,那么这个switchMap将会取消订阅原来的A,所以就不会有a2被归入到总轴上了,那么接下来只会读取B事件流的值,所以最终产生的结果是a1,b1,b2所以这个就是最终的结果。 q19 q20 q22 q23 q24 其中关于pluck操作符,解释如下: q25 q26

所以pluck这个操作符的作用就是如下:

Rx.Observable.fromEvent(input,"keyup")  // fromEvent用于兼听事件,事件触发时,将事件event转成可流动的Observable进行传输。
.pluck("target","value") // 将输入的event,输出成event.target .value
Christian-Yang commented 7 years ago

原文地址:https://segmentfault.com/a/1190000005069851

什么是Subject? 在RxJS中,Subject是一类特殊的Observable,它可以向多个Observer多路推送数值。普通的Observable并不具备多路推送的能力(每一个Observer都有自己独立的执行环境),而Subject可以共享一个执行环境。

Subject是一种可以多路推送的可观察对象。与EventEmitter类似,Subject维护着自己的Observer。

每一个Subject都是一个Observable(可观察对象) 对于一个Subject,你可以订阅(subscribe)它,Observer会和往常一样接收到数据。从Observer的视角看,它并不能区分自己的执行环境是普通Observable的单路推送还是基于Subject的多路推送。

Subject的内部实现中,并不会在被订阅(subscribe)后创建新的执行环境。它仅仅会把新的Observer注册在由它本身维护的Observer列表中,这和其他语言、库中的addListener机制类似。

每一个Subject也可以作为Observer(观察者) Subject同样也是一个由next(v),error(e),和 complete()这些方法组成的对象。调用next(theValue)方法后,Subject会向所有已经在其上注册的Observer多路推送theValue。

下面的例子中,我们在Subject上注册了两个Observer,并且多路推送了一些数值:

··· var subject = new Rx.Subject();

subject.subscribe({ next: (v) => console.log('observerA: ' + v) }); subject.subscribe({ next: (v) => console.log('observerB: ' + v) });

subject.next(1); subject.next(2); ···

Christian-Yang commented 7 years ago

RxJS API解析(一),原文地址:https://segmentfault.com/a/1190000004308457

Amb方法官方地址:http://reactivex.io/documentation/operators/amb.html#collapseRxJS

qa1

Christian-Yang commented 7 years ago

RxJS API解析(二),转子:https://segmentfault.com/a/1190000004313314

Observable.case方法

qa2

Christian-Yang commented 7 years ago

RxJS API解析(三),原文地址:https://segmentfault.com/a/1190000004322157

Observable.catch方法

qa3

Christian-Yang commented 7 years ago

RxJS API解析(四),原文地址:https://segmentfault.com/a/1190000004350904

Observable.combineLatest方法: qa4

Christian-Yang commented 7 years ago

RxJS 教程,原文地址:https://segmentfault.com/a/1190000004293922