我们说我有sequence
这样的话:
Rx.Observable
.interval(1000)
.subscribe(data => {console.log(data)})
使用operators
,我怎样才能restart
'序列,意思是unsubscribe
和resubscribe
。
实际情况是sequence
是套接字流,在某些情况下我们需要unsubscribe
和resubscribe
,有点像retryWhen(errors)
有效,但不是有错误...理想情况下会...... retryWhen(bool:Subject)
。
答案 0 :(得分:2)
我会使用switchMap()
来执行此操作,因为它会自动从旧的Observable取消订阅并订阅新的Observable。在这种情况下,我们只会使用.switchMap(() => source)
:
const subject = new Subject();
const source = Observable.create(obs => {
console.log('Observable.create');
obs.next(42);
});
subject.switchMap(() => source)
.subscribe(v => console.log('next:', v));
setTimeout(() => subject.next(), 1000);
setTimeout(() => subject.next(), 5000);
这将打印以下内容:
Observable.create
next: 42
Observable.create
next: 42
只需代替source
,您就可以拥有自己的WebSocket源代码(或其他任何内容)。