如何使用超时重置循环参数
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)
我正在尝试每 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)