
我试过什么
let intervalTimer = null;
function startTimer(callback, interval) {
// Write the code that goes here
intervalTimer = setInterval(() => {
let obj = {number:0};
if(callback(obj)) {
} else {
}
},interval);
}
function callback(obj) {
obj.number++
console.log(obj.number);
return obj.number < 5;
}到目前为止,这是我的代码--但我只得到了1。在那之后,代码不再继续。我怎么才能解决这个问题?
发布于 2022-06-07 12:13:45
将let obj = {number:0};放在函数闭包之外,就像您对let intervalTimer所做的那样。因为将零添加到回调中,它将增加1,然后将其设置为0。
发布于 2022-06-07 12:22:32
在最初的版本中,每次间隔触发时都会重新创建obj,因此它永远不会前进。
这还将间隔ID返回给调用方,允许根据需求使用多个定时器。
function startTimer(callback, interval) {
let obj = {number:0};
const intervalTimer = setInterval(() => {
if(!callback(obj)) {
clearInterval(intervalTimer)
}
},interval)
return intervalTimer
}
function callback(obj) {
obj.number++
console.log(obj.number)
return obj.number < 5
}
const timer1 = startTimer(callback, 500)
const timer2 = startTimer(callback, 750)
发布于 2022-06-07 12:23:21
下面演示了两个定时器的并发运行。每个计时器回调将根据其counter变量记录一个值。第一个定时器的工作间隔为500毫秒,第二个定时器的工作间隔为1000毫秒。
请注意逻辑OR运算符(||)的使用:
如果运算符的左边计算为一个真实值,则为
。
const startTimer = (callback, interval = 1000) => {
let counter = 1
const tick = () =>
(callback(counter++) || clearInterval(intervalId))
const intervalId = setInterval(tick, interval)
}
const countToTen = (counter) => {
console.log(counter)
return counter < 10
}
const abcs = (counter) => {
// 65 is the start of the Latin Alphabet
console.log(String.fromCharCode(64 + counter))
return counter < 10
}
startTimer(countToTen, 500)
startTimer(abcs)
https://stackoverflow.com/questions/72530874
复制相似问题