我正在尝试创建一个延迟加载指示器的效果,以便每次从 API 检索数据时它不会闪烁或闪烁。这很可能是不知道要搜索什么的情况,因为我敢肯定,我不可能是唯一一个想要在将这样的指示器扔到屏幕上之前给 API 300-500 毫秒响应的人。
@Effect() startDelayTimer: Observable<Action> = this.actions$
.ofType(uiActions.START_LOADING_DELAY_TIMER)
.switchMap(action => Observable
.timer(300)
.mapTo(new uiActions.LoadingDelayTimerCompleteAction));
有什么东西会破坏这个效果的完成吗?我正在将我的所有动作/状态对记录到控制台,并且正在调用 START_LOADING_DELAY_TIMER,但永远不会完成。
编辑
过早地提出了这个问题,因为我遇到的问题最终无关紧要。这是最终的实现,以防其他人发现这个问题:
@Effect() startDelayTimer: Observable<Action> = this.actions$
.ofType(uiActions.START_LOADING_DELAY_TIMER)
.switchMap(action => Observable
.timer(5000)
.takeUntil(this.actions$.ofType(uiActions.CANCEL_LOADING_DELAY_TIMER))
.mapTo(new uiActions.LoadingDelayTimerCompleteAction)
)
- 启动计时器以延迟加载指示灯闪烁
- 如果 a
CancelLoadingDelayTimerAction
被调度(可能是从 API 完成数据检索),停止计时器并且不显示加载指示器。 - 如果计时器在
CancelLoadingDelayTimerAction
调度之前完成,则显示加载指示器。