0

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

我这样做的错误代码是:

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

            this.activeModal.hide();
        });

但是,由于某种原因,这会以指数方式触发刷新令牌,这是不可取的,并且最终会创建一个竞争条件,当已经发布了一个新令牌(从本地存储读取)时发送了一个无效令牌。

因此,当空闲计时器触发一次并且我摆动鼠标时,刷新令牌触发一次,但是第二次触发两次,第三次触发 4 次,我如何让它在每个空闲结束时触发一次?

4

1 回答 1

2

隐藏模式时尝试取消订阅 observable:

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();
});
于 2018-10-31T15:11:17.780 回答