Я нашел много примеров того, как сбросить таймер, но они обычно касались ручного сброса (например, событие нажатия кнопки).
Мне нужна логика c, которая будет автоматически сброс значения по окончании обратного отсчета.
Таймер:
type seconds = number;
const getRemainingTime$ = (store: Store): Observable<seconds> => {
// calculate fullTime based on the TriggerDate extracted from the State
// ...
return fullTime$.pipe(
switchMap((fullTime: seconds) =>
timer(0, 1000).pipe(
map((tickCount: number) => fullTime - tickCount),
takeWhile((remainingTime: seconds) => remainingTime >= 0)
)
)
);
}
Триггер (ожидание значения 0
по таймеру)
getRemainingTime$(this.store).pipe(
skipWhile((remainingTime: seconds) => remainingTime > 0),
)
.subscribe(data => {
const newTriggerDate: Date = new Date(new Date().getTime() + 60 * 1000); // +60 seconds
this.store.dispatch([new SetTriggerDateAction({ newTriggerDate })]);
});
... и это не работает -
Когда оставшееся время равно нулю, триггер сходит с ума и отправляет бесконечное количество действий. Что не так?
PS: Когда я вручную отправляю SetTriggerDateAction (кнопка onClick), проблема исчезает.