Open Christian-freedom opened 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); ···
RxJS API解析(一),原文地址:https://segmentfault.com/a/1190000004308457
Amb方法官方地址:http://reactivex.io/documentation/operators/amb.html#collapseRxJS
RxJS API解析(二),转子:https://segmentfault.com/a/1190000004313314
Observable.case方法
RxJS API解析(三),原文地址:https://segmentfault.com/a/1190000004322157
Observable.catch方法
RxJS API解析(四),原文地址:https://segmentfault.com/a/1190000004350904
Observable.combineLatest方法:
RxJS 教程,原文地址:https://segmentfault.com/a/1190000004293922
这是<<构建流式应用—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
感谢前辈的积累。
注意这里的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所以这个就是最终的结果。 其中关于pluck操作符,解释如下:
所以pluck这个操作符的作用就是如下: