首页 > Web开发 > 详细

rxjs——subject和Observable的区别

时间:2018-12-18 19:02:52      阅读:334      评论:0      收藏:0      [点我收藏+]

一个 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的区别

原文:https://www.cnblogs.com/panfengde/p/10138899.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!