Javascript JS:创建一个函数,该函数返回一个函数,当被调用时,该函数在执行之前等待指定的时间
我的目标是: 编写一个函数delay,它接受两个参数:回调和以毫秒为单位的等待时间。Delay应该返回一个函数,当调用该函数时,该函数在执行之前等待指定的时间量。提示-研究setTimeout() 我尝试了下面的代码:Javascript JS:创建一个函数,该函数返回一个函数,当被调用时,该函数在执行之前等待指定的时间,javascript,function,callback,set,timeout,Javascript,Function,Callback,Set,Timeout,我的目标是: 编写一个函数delay,它接受两个参数:回调和以毫秒为单位的等待时间。Delay应该返回一个函数,当调用该函数时,该函数在执行之前等待指定的时间量。提示-研究setTimeout() 我尝试了下面的代码: const delay = (inputFunc, waitTime, ...args) => { return function () { return setTimeout(inputFunc(), waitTime, ...args) } } /
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)
我做错了什么?答案应该是什么
setTimeout(inputFunc(),waitTime,…args)
这意味着“立即调用inputFunc(),然后将其结果作为第一个参数传递给setTimeout(以及waitTime和args)”。相反,您希望:
setTimeout(inputFunc, waitTime, ...args)
另一个选项是创建一个附加函数,该函数将调用inputFunc,特别是当超时结束时需要执行额外的操作时。例如:
setTimeout(() => {
// do some cleanup stuff related to delay
inputFunc();
}, waitTime, ...args);
setTimeout(inputFunc(),waitTime,…args)
这意味着“立即调用inputFunc(),然后将其结果作为第一个参数传递给setTimeout(以及waitTime和args)”。相反,您希望:
setTimeout(inputFunc, waitTime, ...args)
另一个选项是创建一个附加函数,该函数将调用inputFunc,特别是当超时结束时需要执行额外的操作时。例如:
setTimeout(() => {
// do some cleanup stuff related to delay
inputFunc();
}, waitTime, ...args);
哦,哇,那么inputFunc后面的括号会有很大的不同吗?是的。如果您只是希望在超时关闭时调用该函数,那么您将传入对该函数的引用,setTimeout将在适当的时间为您调用它。你自己也不叫它。哦,哇,那么inputFunc后面的括号就完全不同了?是的。如果您只是希望在超时关闭时调用该函数,那么您将传入对该函数的引用,setTimeout将在适当的时间为您调用它。你自己不叫它。