如何取消订阅共享流

时间:2018-01-19 04:30:25

标签: rxjs rxjs5

基本上,如果一个观察者是从“寒冷”转换而来的。热的'通过调用share,该流无法取消订阅。我以前从来不知道这条规则!它引入了一些有趣的行为,如

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。我可以清楚地看到,如果在流上调用share。永远不会被称为unsubscribe

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

1 个答案:

答案 0 :(得分:0)

我目前的理解:

swithMaptakeUntil等运营商必须在内部对unsubscribe潜在流,并从流开始。它是一个流shared,一个内部计数器,指示将指向共享一个下游的下游数量,以确定是否应该满足潜力