Мне нужно создать эффект, который будет через временные интервалы refre sh токен доступа с refre sh -token - PullRequest
2 голосов
/ 01 августа 2020

Я хочу создать эффект, который будет обновлять токен sh через временные интервалы после успешного входа пользователя. Мне также нужно выбрать refreshToken из магазина, и это становится слишком сложным для меня, и я не могу понять, как чтобы сделать это.

Эффект до сих пор

  @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};
                      }
                    })
                  ))
              )));
      }));

1 Ответ

2 голосов
/ 01 августа 2020

Вы должны использовать оператор сглаживания, если хотите вернуть внутреннюю наблюдаемую:

 @Effect()
  refreshAccessToken$ =
    this.actions$.pipe(
      ofType(AccountActionsTypes.AccountLoginSuccess),
      // ???
      switchMap(() => { ... })
...