RXJS - SwitchMap или SwitchMapTo для сброса таймера
Так что я новичок в 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 (именно так я узнаю, какое текущее время находится на таймере, поэтому я знаю, когда показывать мое всплывающее окно).
Ex.
this.user.tokenExpirationTime.subscribe(x => { ... });
Я мог бы делать все это неправильно, так как я новичок в этом. Я надеюсь, что мое объяснение ясно, но дайте мне знать, если нет. Спасибо вам за помощь!
1 ответ
Замещать
Observable.timer(0, 1000)
// … all the other stuff …
с
// Whenever reset$ emits…
reset$
// (but we emit once initially to get the timer going)
.startWith(undefined)
// … start a new timer
.switchMap(() => Observable.timer(0, 1000))
// … all the other stuff …
где
private reset$ = new Subject();
Затем вы можете добавить функцию, как
public resetTimer() {
this.reset$.next();
}