【发布时间】: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。我可以清楚地看到,如果在流上调用share。 unsubscribe 永远不会被调用
我已经跟进了几个教程并使用 rxjs 有一段时间了,但我自己第一次发现了规则。任何人都可以指出有关此类规则的更多参考吗?
【问题讨论】: