2011-06-14 80 views
4

是否有延迟函数返回,使用setTimeout()延迟函数返回

function foo(){ 
    window.setTimeout(function(){ 
     //do something 
    }, 500); 
//return "some thing but wait till SetTimeout() finished"; 
} 
+0

的*的setTimeout *调用不会启动,直到目前的功能已经完成,因此,如果当前函数正在等待* setTimeout *返回它将有一个非常长的等待...... :( – RobG 2011-06-14 04:57:03

回答

0

就打电话给你要的东西在超时功能结束超时后发生如下:

function foo() 
{ 
    window.setTimeout(function() 
    { 
     //do something 

     delayedCode(returnValue); 
    }, 500); 

    return 
} 

function delayedCode(value) 
{ 
    // do delayed stuff 
} 

而不是返回。将依赖返回值的代码放入delayedCode()并将参数传递给该函数。

2

您不想“延迟”代码,因为它会锁定浏览器线程,导致整个浏览器无法使用,直到您的脚本超时已过。

您可以设置一个事件,侦听经过一段时间后触发的信号。 jQuery的.bind().trigger()是你想要​​

什么,或者,你可以使用一个回调函数,你想要的时间ellapsed后的数据进行工作。所以,如果你打算是这样的:

function myFunc() { 
    doStuff(); 
    result = delayProcess(5000); 
    $('#result').html(result); 
} 

function delayProcess(delay) { 
    // magic code that delays should go here 
    return logic; 
} 

应该是这样的:

function myFunc() { 
    doStuff() 
    delayProcess(5000, function(result){ // Notice the callback function pass as an argument 
    $('#result').html(result);  
    }); 
} 

function delayProcess(delay, callback) { 
    result = logic; 
    setTimeout(function(){ 
    callback(result); 
    }); 
} 
+0

这与从* myFunc *调用* setTimeout *相同,除了在上面的*结果*成为一个全局变量的时刻在* delayProcess *函数中赋值 – RobG 2011-06-14 05:06:20

+0

'setTimeout'不会'阻塞'进一步的代码执行 – KooiInc 2011-06-14 05:11:08