У меня есть код, который опрашивает до тех пор, пока задача не будет завершена
Смотри ниже
this.simulationStatus =
interval(2000).pipe(
switchMap(
() => from(this.simulationService.getSimulationStatus(this.route.snapshot.paramMap.get('jobId')))),
takeUntil(this.stopPoll),
tap(simulation => {
if (simulation && simulation.complete) {
if (this.stopCount == 1) {
// Get once after complete
this.stopPoll.next(true);
}
this.stopCount++;
}
})
);
Я пробовал использовать takeUntil и takeWhile, проблема в том, что последнее значение никогда не публикуется после завершения задачи.
Чтобы обойти это, я должен включить метод tap в тему stopPoll и увеличить значение stopCount, чтобы получить последнее значение.
Итак, вышеизложенное работает, но кажется немного беспорядочным, я уверен, что должен быть лучший способ добиться этого?
Я бы ожидал, что takeUntil опубликует последнее значение или будет иметь переопределение, чтобы сообщить ему, например, takeUntil(observable, {publishLast: true})
Кстати, обновление, наблюдаемое подписывается шаблоном Angular 6. Спасибо заранее.