2017-10-12 123 views
0

我遇到setTimeout()问题,它似乎没有等待调用该函数。首先,我是这样使用它:javascript setTimeout()不等待,即使作为匿名函数调用后

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

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

这不起作用,它只是跳过延迟。所以我查了一下,显然是将函数作为一个匿名函数来修复它。所以,我想这一点:

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

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

但这会做同样的,只是跳过的延迟,一旦第一个被加载导航到第二个URL。任何人都可以帮我解决问题吗?由于

+0

第二个示例按预期工作。 –

+0

这就是*异步*的要点 - 它不会等到行为发生,它只会安排它在将来发生,然后立即返回。 – Bergi

+0

我读过很多帖子,如果我把它作为一个匿名函数包装它会等待执行之前 –

回答

0

从这个

setTimeout(function1, 3000, driverInstance); 

删除第三个参数这应该是setTimeout(function() { function1(driverInstance) }, 3000);

+0

我需要通过函数传递参数? –

+3

为什么要删除第三个参数?这就是你传递论据的方式。 – skyline3000

+0

这仍然是跳过等待时间并立即执行该功能 –

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秒后调用。

相关问题