rxjs 6倒数计时器订阅角度6

时间:2019-04-09 09:24:24

标签: javascript angular rxjs countdowntimer

我尝试使用rxjs 6在angular 6中实现倒数计时器。我还需要能够订阅结果并重置计时器:

我尝试过的事情:

var timer =  interval(1000).pipe(
take(4)
);
timer.subscribe(x => console.log(x));

结果:

0
1
2
3

我需要将计时器从3倒数到1

我发现此coundown函数可以实现反向计数,但是我不能像第一个示例一样订阅它

 interval(1000).pipe(
 map((x) => { console.log( x) })
  );

结果:

3 个答案:

答案 0 :(得分:2)

您可以使用计时器(而不是间隔)来实际实施倒计时,您应该这样映射计时器结果:map(i => countdownStart - i)

  const countdownStart = 3;

  Rx.Observable
    .timer(1000, 1000)
    .map(i =>  countdownStart - i)
    .take(countdownStart + 1)
    .subscribe(i => console.log(i));

日志: 3 2 1个 0

另一种可能的解决方案是使用范围运算符。

Rx.Observable
  .range(0, countdownStart + 1)
  .map(i => countdownStart - i)
  .subscribe(i => console.log(i));

日志: 3 2 1个 0

答案 1 :(得分:0)

这是我使用TimerObservable的方法。记得退订销毁商品。

import {TimerObservable} from "rxjs/observable/TimerObservable";
import { Subscription } from 'rxjs';

export class MyComponent implements OnInit, OnDestroy {

    private sub: Subscription;

    ngOnInit() {
        // Delay 0 seconds, run every second
        let timer = TimerObservable.create(0, 1000);

        let number = 3;

        this.sub = timer.subscribe(t => {
            if(number !== 0) {
               console.log(number);
               number--;
            }
        });
    }

    ngOnDestroy(): void {
        this.sub.unsubscribe();
    }
}

答案 2 :(得分:0)

怎么样?

var timer =  interval(1000).pipe(
  take(4),
  map(x => 3 - x)
);
timer.subscribe(console.log);