rxjs——subject和Observable的区别
Posted YiRanLVY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rxjs——subject和Observable的区别相关的知识,希望对你有一定的参考价值。
一个 Observable 是可以被多个 observer 订阅的,只是每个订阅都是一个新的独立的 Observable execution :
const { Observable } = Rx
const clock$ = Observable.interval(1000).take(3);
const observerA = {
next(v) {
console.log(‘A next: ‘ + v)
}
}
const observerB = {
next(v) {
console.log(‘B next: ‘ + v)
}
}
clock$.subscribe(observerA) // a Observable execution
setTimeout(() => {
clock$.subscribe(observerB) // another new Observable execution
}, 2000)
/*
* A next: 0
* A next: 1
* A next: 2
* B next: 0
* B next: 1
* B next: 2
*/
如果是同一个 shared Observable execution 的话,B的第一个 emit 的值应该是 2 而不是 0 ,并且只有且仅有一个值 2
const { Observable, Subject } = Rx
const clock$ = Observable.interval(1000).take(3);
const observerA = {
next(v) {
console.log(‘A next: ‘ + v)
}
}
const observerB = {
next(v) {
console.log(‘B next: ‘ + v)
}
}
const subject = new Subject()
subject.subscribe(observerA)
clock$.subscribe(subject)
setTimeout(() => {
subject.subscribe(observerB)
}, 2000)
/*
* A next: 0
* A next: 1
* A next: 2
* B next: 2
*/
由于 Subject 是多播,也就是每个 observer 都 share 同一个 Observable execution 。
所以B的第一个 emit 的值并且只有一个值是 2 !
大概 Subject 和 Observable 之间一个很重要的区别就是 Subject 是有状态的,它维护观察者列表。另一方面,Observable 真的只是一个函数,它建立了观察本身。
以上是关于rxjs——subject和Observable的区别的主要内容,如果未能解决你的问题,请参考以下文章
[RxJS] Subject: an Observable and Observer hybrid