Angular 2可重新定时计时器

时间:2017-02-15 10:12:19

标签: angular rxjs

我到处寻找,但我无法找到如何使用Observable或SimpleTimer创建计时器的解决方案,我可以从特定值重新启动。我尝试取消订阅,然后订阅,但它不会从头开始,我也不能使用this.timer = new Observable.timer(...); 有人可以帮帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用switchMap()

来实现可重新启动的计时器
const timerControl$ = new Subject<any>();
const timer$ = timerControl$.switchMap(() => Observable.timer(0, 1000));

timer$.subscribe(i => console.log(i));

// start timer
timerControl$.next();

// re-start timer
timerControl$.next();

编辑:以下版本也可以停止计时器:

const timerControl$ = new Subject<number>();
const timer$ = timerControl$.switchMap(
    period => period ? Observable.timer(0, period) : Observable.empty()
);

timer$.subscribe(i => console.log(i));

// start timer
timerControl$.next(1000);

// re-start timer with different period
timerControl$.next(500);

// stop timer
timerControl$.next(0);