Я думаю, что лучший способ добиться чего-то подобного - setInterval
.Сохраняйте счетчик, который увеличивается с каждым вызовом, до setInterval()
, если счетчик достигает предела, очистите интервал с помощью clearInterval
.Если он удовлетворяет какому-либо другому условию, сбросьте счетчик на ноль:
let nums = [1, 2, 3, 12, 4, 1, 2, 4, 6, 3]
let i = 0
function getValue(fn){
fn(nums[i % nums.length])
i++
}
const MAX_ITERATIONS = 10
let iteration = 0
let int = setInterval(() => {
getValue((value) => {
if(value > 10) iteration = 0; // Reset the counter
else iteration++
})
console.log("loop iteration: ", iteration)
if (iteration >= MAX_ITERATIONS) clearInterval(int)
}, 1000)
При меньшем значении MAX_ITERATIONS
он достигнет конца цикла, прежде чем получит значение больше 10 во второй раз, и остановится:
let nums = [1, 2, 3, 12, 4, 1, 2, 4, 6, 3]
let i = 0
function getValue(fn){
fn(nums[i % nums.length])
i++
}
const MAX_ITERATIONS = 4
let iteration = 0
let int = setInterval(() => {
getValue((value) => {
if(value > 10) iteration = 0; // Reset the counter
else iteration++
})
console.log("loop iteration: ", iteration)
if (iteration >= MAX_ITERATIONS) clearInterval(int)
}, 1000)