Я хочу перебрать (используя setIterval
) массив строк:
const colors = ['all', 'red', 'blue', 'green', 'yellow']
Результат:
console.log('all')
console.log('red') // after 20 sec
console.log('blue') // after 10 sec
console.log('green') // after 10 sec
console.log('yellow') // after 10 sec
Но я должен учитывать и случайное число: во время итерации я могу или не хочу показывать этот цвет (это относится к одному цвету (red
, blue
, green
, yellow
) не all
).
Это зависит от определенного условия, что мы можем рассмотреть случайное число в этом упрощенном примере:
if(Math.random() >= 0.5)
showTheColor
else
doesntShowTheColor
Я моделирую пример:
start animation
show color all for 20 seconds
coin throw for color red = 0.7
show color red for 10 seconds
coin throw for color blue = 0.4
/
coin throw for color green = 0.1
/
coin throw for color yellow = 0.8
show color yellow for 10 seconds
show color all for 20 seconds
coin throw for color red = 0.2
/
coin throw for color blue = 0.3
/
coin throw for color green = 0.78
show color green for 10 seconds
coin throw for color yellow = 0.5
show color yellow for 10 seconds
show color all for 20 seconds
coin throw for color red = 0.6
show color red for 10 seconds
coin throw for color blue = 0.7
show color blue for 10 seconds
coin throw for color green = 0.4
/
coin throw for color yellow = 0.1
/
show color all for 20 seconds
coin throw for color red = 0.2
/
coin throw for color blue = 0.1
/
coin throw for color green = 0.3
/
coin throw for color yellow = 0.15
/
// NB: doesn't show color all for 20 seconds because all the previous colors are null. If I showed all for 20 sec, I would have a total of 40 sec of all and that's not what I want
coin throw for color red = 0.5
show color red for 10 seconds
Вот кусок моего кода:
const INTERVAL_ALL = 20 // sec
const INTERVAL_SINGLE = 10 // sec
export class Animation extends React.Component {
interval = null
i = -1
colors: string[]
async componentDidMount() {
this.colors = ['all', 'red', 'blue', 'green', 'yellow']
this.startPlaying()
}
startPlaying = () => {
this.interval = window.setInterval(() => this.updateColor(), INTERVAL * 1000) // which interval?
}
// where do I put conditions and how?
updateColor() {
this.i = this.i === this.colors.length - 1 ? 0 : this.i + 1
const color = this.colors[this.i]
this.doSomethingWithColor(color)
}
componentWillUnmount() {
clearInterval(this.interval)
}
doSomethingWithColor(color) {
console.log(color)
}
render() {
return (...)
}
}
Код является упрощенной версией, он не учитывает различные типы времени и условий.
Мне нужна помощь
Большое спасибо