RXJS - 用于重置计时器的 SwitchMap 或 SwitchMapTo
RXJS - SwitchMap or SwitchMapTo for resetting timer
所以我是 RXJS 的新手。我想做的是设置一个会话到期计时器,当用户收到他们的会话即将到期的模态提示时,如果他们单击继续,计时器将重置。
我一直在阅读 switchMap 和 switchMapTo,但我发现的示例使用了某种单击事件或鼠标移动事件。我的情况是,我不想在单击按钮时刷新,因为我正在验证 JWT。成功验证 JWT 后,我将刷新计时器。
我有一个用户通用库,可以像这样设置计时器:
private tick: Subscription;
public tokenExpirationTime: Subject<number>;
setupExpirationTimer():void {
// Start the timer based on the expiration
var expirationSeconds = this.expiration * 60;
this.tick = Observable.timer(0, 1000).map(i => expirationSeconds - i).subscribe(x => {
// Set the seconds in the user object
this.tokenExpirationTime.next(x);
console.log("TIMER: " + x);
});
}
在我的代码的其他地方,我订阅了 tokenExpirationTime(这是我知道计时器上的当前时间的方式,所以我知道什么时候显示我的弹出窗口)。
例如
this.user.tokenExpirationTime.subscribe(x => { ... });
我可能做错了,因为我是新手。我希望我的解释很清楚,但如果不明白请告诉我。感谢您的帮助!
替换
timer(0, 1000).pipe(
// … all the other stuff …
)
和
// Whenever reset$ emits…
reset$.pipe(
// (but we emit once initially to get the timer going)
startWith(undefined as void),
// … start a new timer
switchMap(() => timer(0, 1000)),
// … all the other stuff …
)
哪里
private reset$ = new Subject<void>();
然后你可以添加一个函数像
public resetTimer() {
this.reset$.next();
}
所以我是 RXJS 的新手。我想做的是设置一个会话到期计时器,当用户收到他们的会话即将到期的模态提示时,如果他们单击继续,计时器将重置。
我一直在阅读 switchMap 和 switchMapTo,但我发现的示例使用了某种单击事件或鼠标移动事件。我的情况是,我不想在单击按钮时刷新,因为我正在验证 JWT。成功验证 JWT 后,我将刷新计时器。
我有一个用户通用库,可以像这样设置计时器:
private tick: Subscription;
public tokenExpirationTime: Subject<number>;
setupExpirationTimer():void {
// Start the timer based on the expiration
var expirationSeconds = this.expiration * 60;
this.tick = Observable.timer(0, 1000).map(i => expirationSeconds - i).subscribe(x => {
// Set the seconds in the user object
this.tokenExpirationTime.next(x);
console.log("TIMER: " + x);
});
}
在我的代码的其他地方,我订阅了 tokenExpirationTime(这是我知道计时器上的当前时间的方式,所以我知道什么时候显示我的弹出窗口)。
例如
this.user.tokenExpirationTime.subscribe(x => { ... });
我可能做错了,因为我是新手。我希望我的解释很清楚,但如果不明白请告诉我。感谢您的帮助!
替换
timer(0, 1000).pipe(
// … all the other stuff …
)
和
// Whenever reset$ emits…
reset$.pipe(
// (but we emit once initially to get the timer going)
startWith(undefined as void),
// … start a new timer
switchMap(() => timer(0, 1000)),
// … all the other stuff …
)
哪里
private reset$ = new Subject<void>();
然后你可以添加一个函数像
public resetTimer() {
this.reset$.next();
}