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

Javascript 如何使用超时重置for循环参数,javascript,for-loop,settimeout,Javascript,For Loop,Settimeout,我尝试每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; /

我尝试每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)
}
设x=0
设ln=12
函数getValue(){
//返回一个整数值
}
对于(x;x){
getValue((值)=>{
如果(值>10)x=0;//为循环重新启动-似乎无法按预期工作
如果(x==12)//做点别的
})
}, 10)
}

我认为实现类似目标的更好方法是使用
setInterval
。保留一个随着每次调用
setInterval()
而递增的计数器如果计数器达到限制,请使用
clearInterval
清除间隔。如果符合其他条件,则将计数器重置为零:

让nums=[1,2,3,12,4,1,2,4,6,3]
设i=0
函数getValue(fn){
fn(单位[i%nums.length])
我++
}
常量最大迭代次数=10
设迭代=0
设int=setInterval(()=>{
getValue((值)=>{
如果(值>10)迭代=0;//重置计数器
else迭代++
})
log(“循环迭代:”,迭代)
如果(迭代次数>=最大迭代次数)clearInterval(int)

},1000)
您的实际问题是什么?
x=0
是否重置循环?您将无法从
setTimeout
重置循环。在第一次超时触发之前,整个循环将运行。
getValue
是否异步?@MarkMeyer
getValue
是否synchronous@MarkMeyer在JS中是否有不同的方法来实现这一点?它运行5次并退出。我正在寻找一种行为,它会将数组变成一个无限循环,例如,每次调用12时,计数器都会重新开始1、2、3、12、1、2、3、12、1、2、3、12…@Matthew--对不起,复制粘贴错误。我让
getValue
吐出循环值。它将永远运行,因为迭代在计数器用完之前被重置。但是如果你降低
MAX_迭代次数
它将退出。这很接近。。。我试图得到一个函数,它将是1。如果数组中的值大于阈值2,请重新启动for循环。如果在达到
MAX\u ITERATIONS
之前,数组中没有任何项大于阈值,则退出。我认为这个答案是正确的。我仍然需要对一些代码进行思考…好的。我想这正是我所希望的。明天早上我还得再做几个测试。谢谢你的帮助,马克!!