JS:创建返回函数的函数,该函数在被调用时会等待指定的时间,然后再执行

时间:2019-06-11 18:04:54

标签: javascript function callback set timeout

我的目标是:

编写一个函数延迟,该延迟接受两个参数,即回调和等待时间(以毫秒为单位)。延迟应返回一个函数,该函数在被调用时要等待指定的时间后才能执行。提示-研究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)

我在做什么错?答案应该是什么?

1 个答案:

答案 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);