2010-10-02 114 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。

相关问题