我的目标是:
编写一个函数延迟,该延迟接受两个参数,即回调和等待时间(以毫秒为单位)。延迟应返回一个函数,该函数在被调用时要等待指定的时间后才能执行。提示-研究setTimeout();
我尝试了以下代码:
const delay = (inputFunc, waitTime, ...args) => {
return function () {
return setTimeout(inputFunc(), waitTime, ...args)
}
}
// UNCOMMENT THE CODE BELOW TO TEST DELAY
let count = 0;
const delayedFunc = delay(() => count++, 1000);
delayedFunc();
console.log(count); // should print '0'
setTimeout(() => console.log(count), 1000); // should print '1' after 1 second
我得到了错误:
TypeError [ERR_INVALID_CALLBACK]: Callback must be a function at setTimeout (timers.js:390:11)
我在做什么错?答案应该是什么?
答案 0 :(得分:2)
setTimeout(inputFunc(),waitTime,... args)
这意味着“立即调用inputFunc(),然后将其结果作为第一个参数传递给setTimeout(以及waitTime和args)”。相反,您想要:
setTimeout(inputFunc, waitTime, ...args)
另一个选择是创建一个附加函数,特别是如果您需要在超时时做一些额外的事情,该函数将调用inputFunc。例如:
setTimeout(() => {
// do some cleanup stuff related to delay
inputFunc();
}, waitTime, ...args);