NGXS selectSnapshot не возвращает следующее состояние - PullRequest
1 голос
/ 24 сентября 2019

Я определил действие, в котором я получаю данные аутентификации из серверной части и исправляю их до состояния:

@Action(Login)
login({ patchState }: StateContext<AuthStateModel>, { payload }: Login) {
    return this.loginService.loginUser(payload).pipe(tap((result: { token: string }) => {
      patchState({ token: result.token, username: payload.userName });
    }));
  }

И затем сохраняю их в localStorage:

NgxsStoragePluginModule.forRoot({
  key: [
    'auth.token',
  ]
})

Вmy login component: this.store.dispatch([new Login(this.loginForm.value)]);

Теперь в моем token-interceptor я хочу получить доступ к фактическому значению токена, хранящемуся в localStorage, используя Storage plugin:

const token = this.store.selectSnapshot<string>(AuthState.token); Это всегда возвращает предыдущее состояние.Хранилище обновляется, но обновленное значение никогда не возвращается с помощью selectSnapshot.Так каков наилучший способ получить доступ к фактическому (обновленному / next state) значению из магазина?

1 Ответ

0 голосов
/ 25 сентября 2019

Вы можете попытаться добавить toPromise () в конце вызова API (и канала).например:

Action(Login)
async login({ patchState }: StateContext<AuthStateModel>, { payload }: Login) {
 await this.loginService.loginUser(payload).pipe(tap((result: { token: string })=> { 
        patchState({token: result.access_token, username: payload.userName, }); })).toPromise(); 
}

Перед чтением значения снимка убедитесь, что вы ожидаете отправки в хранилище.

await this.store.dispatch([new Login(this.loginForm.value)]).toPromise();

Теперь прочитайте значение снимка.Если вам требуется прочитать снимок в другом месте, отличном от того, в котором отправлено действие, попробуйте использовать хранилище select, чтобы получить обновленную версию токена хранилища и имя пользователя в этом месте (вместо чтения снимка).

Надеюсь, это поможет.

...