2010-10-02 154 views
3

我知道setIntervalsetTimeout函數,但它不適合我的情況,因爲我需要在7秒的時間間隔內創建一個img DOM元素。實現睡眠函數JavaScript的最佳方式是什麼?

  • 圖像的數量不是預定義的(每天變化)。

當我使用setInterval,我不能完全一定限額(每日計)停止它。 [clearInterval僅清除迭代]

當我在內部循環(每日計數)中使用setTimeout時,它永遠不會延遲。所以唯一的可能性是睡眠功能。任何人都可以幫助這種情況?

  • 實現睡眠函數JavaScript的最佳方式是什麼?
+1

如果你的'setTimeout'永遠不會延遲,你做錯了。張貼一些代碼。 – lincolnk 2010-10-02 14:34:59

回答

4

實現睡眠函數JavaScript的最佳方式是什麼?

JavaScript代碼必須是非阻塞的,因爲任何阻塞的代碼(如等待發生的循環)都會使整個瀏覽器無響應。 Web瀏覽器中的JavaScript不僅在單個線程中運行,而且實際上與頁面呈現和UI共享相同的線程。

解決方案是使用定時器:setTimeout()setInterval()。這些功能是非阻塞的;他們立即返回。他們將一個回調函數附加到將來會觸發一段時間的超時事件。 JavaScript代碼在調用setTimeout()函數後立即終止執行,因此用戶仍然可以使用瀏覽器。然後當超時被觸發時,先前定義的回調被調用,並且你的代碼被解釋。這是處理JavaScript中「延遲」的唯一實用方法。

此外,這裏的一對定時器如何JavaScript的工作一篇有趣的文章:


現在你知道爲什麼阻塞睡眠功能將無法正常工作,請使用setTimeout()setInterval()查看@Tomalak's link的幾種解決方案。

+0

亞我同意,但我的問題的任何建議 – ArK 2010-10-02 13:45:37

+0

@Paniyar:讓我添加一些更多的信息.​​..(更新我的答案) – 2010-10-02 13:46:22

+2

您不能在JavaScript中同步運行異步代碼(如超時)。期。 '睡眠'功能不能存在。 – bobince 2010-10-02 14:08:40

1

你抱怨的setTimeout和setInterval,但隨後描述你是如何厲害使用它們。用戶setTimeout 不在循環中並且如果還有更多事情要求它調用另一個setTimeout,或者在達到維護計數後使用setInterval並調用clearInterval。

相關問題