棱角:具有 NgRx 效果的 JWT 更新



我想为Angular项目调整这段代码,使用NgRx效果来处理JWT更新。但是我被可观察量困住了,因为令牌只更新一次,因为timer第一次完成。我也尝试了使用delay运算符,但由于它不会创建可观察量,我不知道如何在此流中实现它。有什么想法吗?谢谢!

// auth.effects.ts
@Effect()
renewJWT$: Observable<Action> = this.actions$.pipe(
ofType(ActionTypes.RenewJWT),
filter(() => this.authService.isLoggedIn()),
concatMap(() =>
this.authService.renewJWT().pipe(
map(() => new ScheduleJWTRenewalAction())
)
)
);
@Effect()
scheduleJWTRenewal$: Observable<Action> = this.actions$.pipe(
ofType(
ROOT_EFFECTS_INIT,
ActionTypes.SigninSuccess,
ActionTypes.ScheduleJWTRenewal
),
takeUntil(this.actions$.pipe(ofType(ActionTypes.Logout))),
map(() => Date.parse(this.authService.session.expiresAt) - Date.now()),
filter((remainingTime: number) => remainingTime > 0),
concatMap((remainingTime: number) =>
timer(Math.max(remainingTime, 1)).pipe(
map(() => new RenewJWTAction())
)
)
);

计时器

签名:计时器(初始延迟:数字 |日期、期间:数字、 调度程序:调度程序:可观察

给定持续时间后,按每个指定的顺序发出数字 期间。

如果未指定periodtimer将发出一次并完成。

takeUntil(this.actions$.pipe(ofType(ActionTypes.Logout))),

用户注销后scheduleJWTRenewal$流将完成。用户可以再次登录吗?) .

最好在filter上替换takeUntil.

相关内容

  • 没有找到相关文章

最新更新