Как лучше написать этот фрагмент?
Чего я пытаюсь добиться, так это начинать новый опрос (и отбрасывать предыдущий) каждый раз, когда eventGenerator$
что-то выдает, но опрос можно отменитьтакже другим уведомителем (anotherEvent$
)
this.eventGenerator.asObservable()
.subscribe(event => {
if (this.polling$) {
this.polling$.unsubscribe();
}
this.polling$ = timer(0, 1000)
.pipe(
switchMap(() => this.service.getSomething())
takeUntil(this.anotherEvent$)
)
.subscribe();
})
Одно из основных правил состоит в том, чтобы не подписываться на другие подписки внутри метода subscribe (). Для этого switchMap
оператор звучит как хороший выбор для объединения в цепочку, но если используется takeUntil
, а anotherEvent$
испускает, он отменит подписку целиком, а не только часть опроса, поэтому другой выброс eventGenerator
не будетобрабатываться больше и не будет создавать другой таймер.