gpt4 book ai didi

angular - 取消 ngrx 效果中的计时器

转载 作者:行者123 更新时间:2023-12-01 09:47:53 25 4
gpt4 key购买 nike

我有一个微调器,我希望微调器在显示之前等待 x 秒。但是,如果在微调器等待超时完成期间调用 REQUEST_DEACTIVATE_SPINNER,它应该停止触发 ACTIVATE_SPINNER 操作。又名我想取消事件计时器。这是我到目前为止。

  @Effect() spinnerActive$ = this.actions$
.ofType(REQUEST_ACTIVATE_SPINNER, REQUEST_DEACTIVATE_SPINNER)
.switchMap(action => {
// create a timer and return it active event sent when timer completes
if (action.type === REQUEST_ACTIVATE_SPINNER) {
timer$ = Observable.timer(action.payload.delay || 0)
.switchMap(() =>
Observable.of({type: ACTIVATE_SPINNER})
);
}

if (action.type === REQUEST_DEACTIVATE_SPINNER) {
// check to see if a timer is running if it is cancel it
if (timer$) {
// cancel the timer
}
return Observable.of({type: DEACTIVATE_SPINNER});
}
});

某些机构可能会向我们展示如何取消正在返回到 Effect 的计时器。

最佳答案

您应该能够使用 takeUntil operator 解决您的问题。 .

你可以用它来完成 switchMap 中的 observable为 REQUEST_ACTIVATE_SPINNERREQUEST_DEACTIVATE_SPINNER时生效收到行动。

请注意,现在有两种效果,如 REQUEST_DEACTIVATE_SPINNER效果现在独立于 REQUEST_ACTIVATE_SPINNER影响:

@Effect() spinnerActive$ = this.actions$
.ofType(REQUEST_ACTIVATE_SPINNER)
.switchMap(action => Observable
.timer(action.payload.delay || 0)
.takeUntil(this.actions$.ofType(REQUEST_DEACTIVATE_SPINNER))
.switchMap(() => Observable.of({ type: ACTIVATE_SPINNER })
);

@Effect() spinnerDeactive$ = this.actions$
.ofType(REQUEST_DEACTIVATE_SPINNER)
.switchMap(action => Observable.of({ type: DEACTIVATE_SPINNER }));

还有一些 switchMap运算符是不必要的,可以替换为 mapTo :

@Effect() spinnerActive$ = this.actions$
.ofType(REQUEST_ACTIVATE_SPINNER)
.switchMap(action => Observable
.timer(action.payload.delay || 0)
.takeUntil(this.actions$.ofType(REQUEST_DEACTIVATE_SPINNER))
.mapTo({ type: ACTIVATE_SPINNER })
);

@Effect() spinnerDeactive$ = this.actions$
.ofType(REQUEST_DEACTIVATE_SPINNER)
.mapTo({ type: DEACTIVATE_SPINNER });

关于angular - 取消 ngrx 效果中的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44786191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com