Angular 6 с двойной подпиской - PullRequest
0 голосов
/ 31 октября 2018

Я хотел бы выполнить вызов API обновления токена, когда в моем приложении истекает время ожидания ...

Мой неправильный код для этого:

idle.onIdleEnd.subscribe(() => {
            console.log('idle end reached');
            if (this.authStore.isAuthenticated()) {
                this.authService.refreshToken().subscribe(() => null);
            }

            this.activeModal.hide();
        });

Однако это по какой-то причине экспоненциально вызывает токен обновления, что нежелательно и в конечном итоге создает состояние гонки с недействительным токеном, отправляемым, когда новый уже выпущен (считывается из локального хранилища).

Так что, когда таймер простоя срабатывает один раз, и я шевелю мышью, обновляем токен один раз, однако во второй раз он срабатывает дважды, а третий раз срабатывает 4 раза, как мне заставить его срабатывать один раз для конца холостого хода?

1 Ответ

0 голосов
/ 31 октября 2018

Попробуйте отписаться от наблюдаемого при скрытии модального:

private subscription: Subscription;

this.subscription = idle.onIdleEnd.subscribe(() => {
    console.log('idle end reached');
    if (this.authStore.isAuthenticated()) {
        this.authService.refreshToken().subscribe();
    }

    this.activeModal.hide();
    this.subscription.unsubscribe();
});
...