Привет, у меня была такая же проблема, и я решил ее следующим образом:
// rxjs V6
import {Injectable} from "@angular/core";
import { Observable,timer, interval, of, Subject } from 'rxjs';
import { tap, map, share, switchMap, distinctUntilChanged} from rxjs/operators';
import * as moment from 'moment';
@Injectable()
export class ClockService {
private interval = 1000;//1sec
private countDown$:Observable<boolean>;
public starter: Subject<number> = new Subject();
public countdown(start:number):Observable<boolean>{
this.setCountdown(start);
return this.countDown$;
}
private setCountdown(_start:number){
let start =moment().add(_start, 's').unix();
this.countDown$= interval(this.interval).pipe(
map(tick => start - moment().unix()),
map(tack=>tack==0? true : false),
distinctUntilChanged(),
share()
);
}
, а затем в ваших компонентах
this.countService.starter.pipe(
switchMap((start)=>this.countService.countdown(start)))
.subscirbe(tick=>tick? /* clean localSotrage */ : /* do nothing */)
после каждого запроса
this.countService.starter.next(10*60*1000);