【问题标题】:setTimeout doesn't wanto to make delay on method call [duplicate]setTimeout 不想延迟方法调用 [重复]
【发布时间】:2016-01-25 11:40:56
【问题描述】:

我有一个类,它的方法被实例化为一个对象。单击元素时,应调用对象方法。两个电话都有效。但是,我预计第二次通话会有 75000 的延迟。但是,根本没有延迟。它毫不拖延地拨打第二个电话。我在这里使用 ECMAScript6。

class Test {
  foo(x){
    switch (x) {
      case 1:
        alert('test1')
      break;
      case 2:
        alert('test2');
      break;
    }
  }
}

var test = new Test();
$('#test-trigger').click(function() {
  test.foo(1);
  setTimeout(test.foo(2),75000)
});

【问题讨论】:

  • 那是因为你马上打电话给test.foo(2)
  • “第二次调用没有任何延迟” - 直接调用方法,因为那是()最后的确实。您需要将函数 reference 传递给 setTimeout。

标签: jquery ecmascript-6


【解决方案1】:

您正在调用setTimeout 中的函数,而不是将函数作为参数传递。您可以创建一个新函数(从旧函数开始),绑定它并使用 Function.prototype.bind() 为其添加参数:

setTimeout(test.foo.bind(test, 2), 75000);

【讨论】:

  • 这行得通,只要 Stackoverflow 允许,我就会接受你的回答。
  • @Kunok 了解它的工作原理很重要。
  • 确实!现在我阅读了一些关于问题和你的答案的 cmets,现在我很清楚了。
猜你喜欢
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2019-06-10
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多