即使在作为匿名函数调用之后,javascript setTimeout()也没有等待

时间:2017-10-12 20:35:40

标签: javascript settimeout

我遇到了setTimeout()的问题,它似乎没有等待调用该函数。首先,我这样使用它:

NAME:

这不起作用,它会跳过延迟。所以我查了一下,显然将函数包装为匿名函数会解决它。所以我尝试了这个:

function function1(driver){
  driver.get(secondaryUrl);
}

driver.get(initialUrl);
setTimeout(function1, 3000, driverInstance);

但是这样做也是如此,只需跳过延迟并在加载第一个URL后立即导航到第二个URL。任何人都可以帮我解决问题吗?感谢

2 个答案:

答案 0 :(得分:0)

从中删除第三个参数:

setTimeout(function1, 3000, driverInstance);

应该是:

setTimeout(function () {
    function1(driverInstance)
}, 3000);

答案 1 :(得分:0)

我不确定我是否理解正确,因为您的示例中缺少变量声明。 我假设您使用某种方法在JS中创建对象。并且您希望两次调用此方法之间有一些延迟。如果是这样,那么下面这样的代码应该可行。我已将get方法替换为processUrl

var url1 = 'http://something';
var url2 = 'http://another';

function Driver( url ) {
  this.processUrl = function( url ) {
    // some logic with URL
    console.log( url );
  }
}

var driver = new Driver()

driver.processUrl( url1 );

function fun1( instance ) {
  instance.processUrl( url2 )
}

setTimeout(fun1, 3000, driver);

甚至更简单的解决方案,而不使用其他功能:

var url1 = 'http://something';
var url2 = 'http://another';

function Driver( url ) {
  this.processUrl = function( url ) {
    // some logic with URL
    console.log( url );
  }
}

var driver = new Driver()

driver.processUrl( url1 );
setTimeout( driver.processUrl, 3000, url2 );

这里重要的是:缺少括号()。在函数名末尾添加括号时,它将在代码处理时立即调用函数。您需要提供引用才能在3秒后调用该函数。