我在Javascript成爲延遲腳本不工作
function sleep(ms) {
var d = new Date();
var target=d.getTime()+ms;
var next = d;
console.log('Slept');
while(next.getTime()<=target) {
next=new Date();
}
console.log('Woke Up');
return;
}
睡眠功能對象(控制檯)
Slept
5秒
Woke Up
後使用此
sleep(5000)
打印出來
此代碼也正常工作 - alert('foo'); sleep(5000); alert('bar');
第一個foo
和5秒鐘後bar
。
但這個功能
//ctx is a 2d context of a canvas
function go() {
ctx.fillRect(100,100,200,200);
sleep(1000);
ctx.fillRect(200,200,300,300);
sleep(1000);
ctx.fillRect(300,300,400,400);
sleep(1000);
ctx.fillRect(400,400,500,500);
}
go();
不工作。我的意思是它正在工作,但不是它應該的方式。首先控制檯顯示 -
Slept
//1 second later
Woke Up
//1 second later
Slept
//1 second later
Woke Up
Slept
//1 second later
Woke Up
並且在打印完所有這些消息之後,圖形(矩形)將繪製在畫布上。 有沒有辦法做到這一點,而不使用setTimeout
或setInterval
?
問題 - 爲什麼fillRect
不能使用我的sleep
函數? 有沒有一種方法來延遲JavaScript中的一些代碼,而不使用setTimeout
和setInterval
?
有什麼特別的原因你不能或不想使用這些?定時器通常是延遲代碼執行的首選方式,因爲它們允許其他代碼/事件在此期間繼續運行。 – 2013-03-06 07:06:25
@JonathanLonowski我正在避免這些,因爲需要執行一些操作。把它們放在一個回調中,然後在滿足某個條件後使用'clearTimeout'變得非常混亂。 – ShuklaSannidhya 2013-03-06 07:28:04