Я пытаюсь поставить таймер из rxjs 6 в сервис 6 angular. И это не срабатывает. Я посмотрел в документации без какой-либо удачи. Это мой сервисный код (только соответствующая часть:
import { map,flatMap, catchError, take } from 'rxjs/operators';
import { BehaviorSubject, of, throwError,timer, Observable } from "rxjs";
.....
countdownTimer = new Observable<number>();
formatCountdownTime(count) {
const seconds = count % 60 < 10 ? '0' + Math.floor(count % 60) : Math.floor(count % 60);
/* if(count <= 1000){
//set timer to NOT RUNNING state so it updates UI components like the button that depends on the count
this.contributorManagerService.countdownTimerIsRunning.next(false);
} */
return Math.floor(count / 60) + ':' + seconds;
}
createCountdownTimerObservable(count){
this.countdownTimer = timer(0, 1000);
}
и это потребление таймера. Мне нужно знать, когда истекло время, и поэтому я передаю этот третий функциональный параметр подписке, поскольку мне нужно включить кнопку, когда время истекло.
import { map,take } from 'rxjs/operators';
export class CampaignDataComponent implements OnInit, OnDestroy {
countdownTimerIsRunning = false ;
count: number;
ngOnInit(){
/* I subscribe to the timer and the 3rd parameter indicates what to do when time has elapsed */
this.sharedHelpersService.countdownTimer.
pipe(
take(this.count),
map(() => {
--this.count;
return this.count;
})
).subscribe(count=>{
console.log("New count",count);
if(count>0){
this.countdownTimerIsRunning = true;
}
},
err=>{
console.log("Countdown timer error", err);
},
()=>{
console.log("Time has elapsed");
this.countdownTimerIsRunning = false;
});
}
}
Вы знаете, почему не срабатывает? Раньше он работал, когда я использовал всю цепочку компонента, но, поскольку мне нужно было использовать ее из других компонентов, мне пришлось поместить ее в службу, и это сломало ее. Есть идеи?. Заранее большое спасибо
РЕДАКТИРОВАТЬ: просто чтобы уточнить, они все компоненты должны потреблять один и тот же обратный отсчет