如何在JavaScript中實現某個方法執行超時後則繼續執行其它方法?

阿敏總司令發表於2007-11-09
我的一個想法是這樣的,如下程式碼:
[code]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>JavaScript方法執行超時測試</title>
<script>
var executed = false; // 方法B是否執行的標誌位
var x = 0; // 方法A中用來累加計數,使方法A執行超時
var expiredTime = 3000;

// 方法A
function methodA( )
{
// 第一句就執行定時器
setTimeout("methodB()",expiredTime);// setInterval()
// 方法A的耗時內容執行開始
x = x + 1;
document.counter.displayBox.value = x;
for(i = 0;i < 80000;i++)
{
window.status = "i=" + i;
}
// 方法A的耗時內容執行結束

// 當方法A的耗時內容沒有超過expiredTime的時間執行完成的話,就直接開始執行方法B
methodB();
// 設定方法B執行完成的標誌位
executed = true;
}

// 方法B
function methodB()
{
if(executed == true)
{
// 執行過了......
}
else
{
// 執行......
}
}
</script>
</head>

<body>
<form name="counter">
<input type="text" name="displayBox" value="0" size="10"/>
</form>

<script>
methodA();
</script>

</body>
</html>
[/code]

異想天開,想用 setTimeout 來做個 workaround ,但是 setTimeout / setInterval 方法是在它所在的方法執行完之後才開始計時的,於是,光噹一聲,這個 workaround 不成立。
各位有沒有做過類似的需求,如何解決的呢?

相關文章