首页 > 解决方案 > 当定时器达到零值时复位

问题描述

我发现了许多如何重置计时器的示例,但它们通常涉及手动重置(例如单击按钮事件)。

我需要一个在倒计时结束时自动重置值的逻辑。

定时器:

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 按钮)时,问题就消失了。

标签: rxjsngrx

解决方案


替换skipWhilefilter.

跳过而

如果 skipWhile 中的条件至少满足一次,则发出所有值。


筛选

仅发出条件中指定的那些值。


推荐阅读