Rxjs 当结束时,需要将计时器倒计时重置为60,或以任何方式以角度2结束

Rxjs 当结束时,需要将计时器倒计时重置为60,或以任何方式以角度2结束,rxjs,angular2-observables,Rxjs,Angular2 Observables,我正在开发在Angular2招标网站。我需要一个计时器为每个产品,它开始在60秒,当它达到0时,它再次重置为60 倒计时; 计数器=60; 构造函数(){ this.countDown=可观测计时器(01000) 拿(这个柜台) .map(()=>--此.counter); } 计数器以60秒开始,以0结束。但我不能实现重置部分,当它的值变为0时,重新分配60以进行计数 我对RxJs中的Obervables知之甚少。有人能帮我吗?欢迎来到Stack Overflow 我们可以用一些数学来实现这

我正在开发在Angular2招标网站。我需要一个计时器为每个产品,它开始在60秒,当它达到0时,它再次重置为60

倒计时;
计数器=60;
构造函数(){
this.countDown=可观测计时器(01000)
拿(这个柜台)
.map(()=>--此.counter);
}
计数器以60秒开始,以0结束。但我不能实现重置部分,当它的值变为0时,重新分配60以进行计数


我对RxJs中的Obervables知之甚少。有人能帮我吗?

欢迎来到Stack Overflow

我们可以用一些数学来实现这一点请阅读奖金部分以查看备选方案

this.countDown=可观察
.timer(0,1000)//发出0,1,2,3,4,5,6,7,8。。。
.map(勾号=>60-(勾号%60));//发射60,59,58。。。0, 60, 59...
我们用60除法的剩余部分-
勾选%60

1 % 60 = 1
2 % 60 = 2
...
60 % 60 = 0
61 % 60 = 1
...
如果我们想从60倒数,那么我们需要从60中减去除法的其余部分

奖金(回答评论中的问题)

如果你想从一个随机数开始,你必须在可观察状态中保持某种状态。运营商就是为了这个目的。在这个场景中,使用操作符是一种过度使用,我们可以使用

函数getRandomNumber(){//返回一个从1到60的随机整数
返回Math.floor(Math.random()*60)+1;
}
可观察
.interval(1000)//每秒发射一次
//'scan'的工作原理类似于数组的'reduce'方法
//它在“acc”中保持自己的内部状态`
//`acc`初始值是随机的,当它达到1时,会再次为其分配一个新的随机整数
.scan(acc=>acc==1?getRandomNumber():acc-1,getRandomNumber());
//发射,例如5,4,3,2,1,10,9,8,7,6。。。

从技术上讲,您可以通过将
getRandomNumber
替换为所需的数字来解决原始问题。

如果要开始随机数字倒计时,我应该怎么做?例如:1。产品->25秒->60秒->60秒;2.产品->14秒->60秒->60秒等