基本上,如果一个观察者是从“寒冷”转换而来的。热的'通过调用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很长一段时间,但是我自己第一次发现规则。任何人都可以指出更多关于这种规则的参考吗?
答案 0 :(得分:0)
我目前的理解:
swithMap
和takeUntil
等运营商必须在内部对unsubscribe
潜在流,并从流开始。它是一个流shared
,一个内部计数器,指示将指向共享一个下游的下游数量,以确定是否应该满足潜力