【问题标题】:How to unsubscribe a shared stream如何取消订阅共享流
【发布时间】:2018-01-19 04:30:25
【问题描述】:

基本上,如果通过调用 share 将 observable 从“冷”转换为“热”,则无法取消订阅流。我以前从来不知道规则!它引入了一些有趣的行为,例如

const shared = false;
const myObservable = Observable.create(observer => {
    let counter = 0;
    const intervel = setInterval(() => {
        console.log(`${++counter} passed`)
        observer.next(counter)
    }, 1000)

    return () => {
        console.log('myObservable is realised')
        clearInterval(intervel)
    }
})
const start$ = Observable.fromEvent(startButton, 'click');
let interval$
if (shared) {
    interval$ = myObservable.share()
} else {
    interval$ = myObservable
}

const startInterval$ = start$.switchMapTo(interval$)

startInterval$
    .subscribe((v) => {
        console.log('subscribe', v)
    })

shared设置为false时,每次点击开始按钮,计数器都会从0重新开始。如果设置为true,计数器会一直加下去

我通过Observable.create 创建了一个自定义的observable,并实现了unsubscribe。我可以清楚地看到,如果在流上调用shareunsubscribe 永远不会被调用

我已经跟进了几个教程并使用 rxjs 有一段时间了,但我自己第一次发现了规则。任何人都可以指出有关此类规则的更多参考吗?

【问题讨论】:

    标签: rxjs rxjs5


    【解决方案1】:

    我目前的理解:

    swithMaptakeUntil 等运算符必须在内部潜在地unsubscribe 流并从流开始。如果流是shared,一个内部计数器将维护多少个指向共享的下游,以确定是否应该实现潜力

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 1970-01-01
      • 2020-04-28
      • 2020-11-29
      • 2022-01-19
      • 2012-03-14
      • 2020-04-07
      • 2021-08-25
      • 2015-10-20
      相关资源
      最近更新 更多