如何使用超时重置循环参数

How to Reset for Loop Parameter with Timeout

我正在尝试每 10 毫秒 运行 一个函数,并在值达到特定阈值时重新启动该函数。

如果 value > 10 我怎样才能重新开始这个 for 循环?

let x = 0
let ln = 12

function getValue() {
  // Returns an integer value
}

for (x; x <= ln; x++) {
  setTimeout(() => {
    getValue((value) => {
      if(value > 10) x = 0; // Restart for loop - doesn't seem to be working as intended
      if(x == 12) // do something else
    })
  }, 10)
}

我认为实现这样的目标的更好方法是 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)