使用setTimeout()实现延迟函数并传递可选参数(Javascript)

时间:2017-09-08 10:14:38

标签: javascript

我试图通过从头开始实现中间函数来掌握Javascript。目前正在尝试实现延迟函数,该函数执行在等待时间(等待)之后作为参数传递的任意函数。这还需要能够转发额外传递的参数作为被延迟函数的额外参数。

到目前为止我所做的并不是在setTimeout()中调用该函数。我不确定它是语法错误还是我完全错过了这一点。我在这里查看了类似的问题,并试图实现一些建议的结果,但似乎没有人考虑额外的论点方面。无论如何,这是我现在拥有的。

    var exampleDelay = function (func, wait) {
      return function () {
        setTimeout(func.apply(this, arguments), wait);
      }
    };

任何帮助解决这个问题都会受到赞赏(或者如果有人能指出我可能错过的答案)。

2 个答案:

答案 0 :(得分:0)

您从try: tagged = nltk.pos_tag(tokens) except LookupError: nltk.download("averaged_perceptron_tagger") 返回的功能是您稍后调用的功能。 要在调用该函数时保留exampleDelay,直到计时器执行它为止,您可以将预期函数包装在计时器内的匿名函数中。然后在里面你可以使用arguments来传递先前存储的参数。与以下类似。

apply

答案 1 :(得分:0)

Fran打败了我,但只是为了变化。 如果你想一次性提供所有参数,这可能是一个选项



   var exampleDelay = function(callback,wait,args) {
   
var args = [].slice.call(arguments) // get the parent arguments and convert to an array
args.splice(0,2); // remove the first two argument which are the fuction supplied and the wait time

// a fuction to call the supplied function
    var callnow =  function() {  
    var params = arguments; // get the child arguments 
    var context = this;
    
    setTimeout(function(){
      callback.apply(context, params) // call the function 
    }, wait);
  }
     
     callnow.apply( this, args ) // use apply to supply the arguments extracted from the parrent
   };


   exampleDelay(console.log, 1000,"hey")

   exampleDelay(console.log, 5,"hey", "there")




 callnow.apply( this, args ) // we then call the function with apply and supply args extracted from the parent 

好吧,您可以稍后处理函数验证,以确保第一个参数是函数