Мне нужно, чтобы мое внешнее приложение опрашивало мое внутреннее приложение и обновляло sh отображаемые данные. Я решил это определенным образом, но у меня есть ощущение, что это можно оптимизировать. Вот мое решение:
this.pollDataSource$ = new BehaviorSubject<number>(this.pollingInterval);
this.pollDataSource$
.pipe(
switchMap(duration =>
of(duration)
.pipe(
filter(duration => duration !== 0),
delay(duration),
concatMap(() => this.kubernetesObjectList$)
)
)
)
.subscribe({
next: (kubernetesObjectList) => {
this.dataSource.data = kubernetesObjectList;
if (this.pollingInterval > 0) {
this.pollDataSource$.next(this.pollingInterval);
}
}
});
this.pollDataSource$.next(-1);
Итак, у меня есть выпадающий селектор, который влияет на this.pollingInterval
. Кроме того, у меня есть this.pollDataSource$
, что BehaviorSubject<number>
. Он генерирует number
, который используется в качестве продолжительности до следующего опроса.
Когда this.pollDataSource$
испускает -1
(это происходит, когда пользователь нажимает Refre sh кнопка), источник данных должен быть опрошен немедленно, независимо от того, какой интервал опроса установлен.
Когда this.pollDataSource$
выдает некоторое положительное число (это происходит, когда пользователь выбирает определенный интервал опроса из выпадающего списка) этот номер должен использоваться как продолжительность до следующего refre sh.
Когда this.pollDataSource$
испускает 0
(это происходит, когда пользователь выбирает параметр Stop Polling в тот же выпадающий селектор), мы должны прекратить опрос, пока пользователь не выберет новый интервал опроса.
И все работает просто отлично. Страница загружена, по умолчанию this.pollingInterval
имеет 10000
, поэтому пользователь получает данные немедленно, но через 10 секунд они обновляются. Когда пользователь нажимает Refre sh, данные обновляются, и следующий автомат c refre sh происходит через 10 секунд после этого. Когда пользователь переключается на Stop Polling , данные остаются на месте. Когда пользователь переключается на другой интервал, данные снова обновляются. Все здорово! Но у меня есть ощущение, что мое решение не оптимально. Мне просто не нравится эта конструкция: ...pipe...switchMap...of...pipe...
Есть ли способ упростить это?
Заранее спасибо за все подсказки.