歡迎來到Stack Overflow!
我們可以用一些數學來達到這個目的。 請閱讀獎金部分,看到另一種
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開始倒計時,然後我們需要減去從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
來解決原來的問題。
如果我想開始countDowns隨機數字我該怎麼辦?例如:1.產品 - > 25秒 - > 60秒 - > 60秒; 2.產品 - > 14秒 - > 60秒 - > 60秒等 – Yusuf
檢查我更新的答案。如果有幫助,請將此答案標記爲已接受。 –