ようこそスタックオーバーフロー!
これを達成するために数学を使うことができます。 我々は60による除算の残りの部分を取っている
this.countDown = Observable
.timer(0, 1000) // emits 0, 1, 2, 3, 4, 5, 6, 7, 8...
.map(tick => 60 - (tick % 60)); // emits 60, 59, 58... 0, 60, 59...
代替見るためにボーナスパーツをお読みください - 私たちは60からカウントダウンしたい場合は、私たちが引く必要がありtick % 60
1 % 60 = 1
2 % 60 = 2
...
60 % 60 = 0
61 % 60 = 1
...
を60.
ボーナス(コメントでの質問への答え)
0123から部門の残りの部分
乱数で始める場合は、観測対象にある種の状態を維持する必要があります。 scan
オペレータがこの目的を果たします。このシナリオでは、timer
演算子を使用することは過剰です。代わりにinterval
を使用できます。
function getRandomNumber() { // returns a random integer from 1 to 60
return Math.floor(Math.random() * 60) + 1;
}
Observable
.interval(1000) // emits every second
// `scan` works like `reduce` method of the array
// it keeps its own internal state in `acc`
// `acc` initial value is random and when it reaches 1, it has a new random integer assigned to it again
.scan(acc => acc === 1 ? getRandomNumber() : acc - 1, getRandomNumber());
// emits e.g. 5, 4, 3, 2, 1, 10, 9, 8, 7, 6...
技術的にはあなたが必要な数でgetRandomNumber
を置き換えることにより、元の問題を解決することができます。
カウントダウンをランダムに開始する場合は何をすればいいですか?例:1.製品 - > 25秒 - > 60秒 - > 60秒; 2.製品→14秒→60秒→60秒など – Yusuf
更新された回答を確認してください。それが助けられたら、この答えに合格とマークしてください。 –