RxJS - 重试或重置

时间:2017-06-21 15:43:37

标签: rxjs rxjs5

我们说我有sequence这样的话:

Rx.Observable
.interval(1000)
.subscribe(data => {console.log(data)})

使用operators,我怎样才能restart'序列,意思是unsubscriberesubscribe

实际情况是sequence是套接字流,在某些情况下我们需要unsubscriberesubscribe,有点像retryWhen(errors)有效,但不是有错误...理想情况下会...... retryWhen(bool:Subject)

1 个答案:

答案 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源代码(或其他任何内容)。