我想创建一个效果,它将在用户成功登录后按时间间隔刷新 token ,我还需要从商店中选择刷新 token ,这对我来说开始太复杂了,我不知道该怎么做.
目前效果
@Effect()
refreshAccessToken$ =
this.actions$.pipe(
ofType(AccountActionsTypes.AccountLoginSuccess),
map(() => {
interval(5000)
.pipe(
mapTo(() => this.store
.pipe(
select(selectRefreshToken),
map(refreshToken => {
if (refreshToken != '' && refreshToken != undefined) {
this.accountService.refreshToken(refreshToken)
.pipe(
map((response: { token: string }) => {
return {type: AccountActionsTypes.RefreshTokenSuccess, token: response.token};
})
);
} else {
return {type: AccountActionsTypes.RefreshTokenSuccess, token: ''};
}
})
)));
}));
也许有人会发现这很有帮助,这是通过建议修复的效果:
@Effect()
refreshAccessToken$ =
this.actions$.pipe(
ofType(AccountActionsTypes.AccountLoginSuccess),
switchMap(() => {
return interval(5000)
.pipe(
switchMap(() => this.store
.pipe(
select(selectRefreshToken),
switchMap((refreshToken) => this.accountService.refreshToken(refreshToken)
.pipe(
map((response: { token: string, status: string }) => {
if (response.token !== undefined) {
return {
type: AccountActionsTypes.RefreshTokenSuccess,
token: response.token,
};
} else {
return {type: AccountActionsTypes.RefreshTokenWrong, status: response.status};
}
})
))
)));
}));
最佳答案
如果要返回内部可观察值,则必须使用展平运算符:
@Effect()
refreshAccessToken$ =
this.actions$.pipe(
ofType(AccountActionsTypes.AccountLoginSuccess),
// 👇👇👇
switchMap(() => { ... })
关于angular - 我需要创建效果,它将在时间间隔内使用刷新 token 刷新访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63203377/