Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:创建一个函数,该函数返回一个函数,当被调用时,该函数在执行之前等待指定的时间_Javascript_Function_Callback_Set_Timeout - Fatal编程技术网

Javascript JS:创建一个函数,该函数返回一个函数,当被调用时,该函数在执行之前等待指定的时间

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) } } /

我的目标是:

编写一个函数delay,它接受两个参数:回调和以毫秒为单位的等待时间。Delay应该返回一个函数,当调用该函数时,该函数在执行之前等待指定的时间量。提示-研究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)
我做错了什么?答案应该是什么

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将在适当的时间为您调用它。你自己不叫它。