Angular 6双重订阅问题

时间:2018-10-30 23:11:10

标签: angular refresh-token ng-idle

当我的应用程序中的空闲超时结束时,我想发出刷新令牌API调用...

我这样做的错误代码是:

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

            this.activeModal.hide();
        });

但是,由于某种原因,这会以指数形式触发刷新令牌,这是不希望的,最终会导致竞争状态,当已经发出新令牌时(从本地存储读取)发送无效令牌。

因此,当空闲计时器触发一次并且我摇动鼠标时,刷新令牌将触发一次,但是第二次触发两次,第二次触发第四次,如何使每个空闲端触发一次? / p>

1 个答案:

答案 0 :(得分:1)

隐藏模态时尝试取消订阅可观察对象:

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