У меня BehaviorSubject
, который получает обновления каждые 5 секунд из моих других файлов.
Но иногда я не могу ждать 5 секунд, пока не произойдет новое событие, поэтому я ищу способ обновить только один элемент Behaviorsubject
.
Я создал следующее для обработки одного элемента:
updateSingleTimer(timer,time,secs = false) {
this.timers$.pipe(takeUntil(this._destroyed$)).subscribe((data:any) => {
var newdata = data;
newdata[timer] = time;
this.updateTimers(newdata);
});
}
конечно, это создаст бесконечный цикл, потому что таймеры обновляются после вызова updateTimers
функции.
Итак, мне нужно только один раз получить данные таймеров в функции updateSingleTimer
и не подписываться на них.
В: Как бы я изменил код, указанный выше, чтобы он получал результат только один раз из this.timers$
?
В: также, возможно ли обновить один элемент проще, чем то, что я сейчас делаю?
полный код:
_timers = new BehaviorSubject<any>(null);
private timersChangeSet = new Subject<any>();
constructor(private http: HttpClient, private router: Router) {
this.timersChangeSet.subscribe(val => this._timers.next(val))
}
timers$ = this._timers.asObservable();
updateTimers(object) {
this.timersChangeSet.next(object);
}
updateSingleTimer(timer,time,secs = false) {
// the code will result in infinity loop, of course. but how would i only get the value once?
this.timers$.pipe(takeUntil(this._destroyed$)).subscribe((data:any) => {
var newdata = data;
newdata[timer] = time;
this.updateTimers(newdata);
});
}