nom*_*ind 14 javascript html5 modal-dialog blocking
假设我想在一定时间内阻止Javascript执行出于某种奇怪的原因,我该怎么做呢.JS中没有sleep().请不要说做while()循环,因为那很糟糕.我可以做一个window.showModalDialog并在一个非常小的时间的setTimeout的模态对话框中放置一个window.close,这样用户就不会注意到该对话框.这就像睡眠一段时间,如果需要我可以多次调用.还有其他方法吗?
详细说明,我的用例是HTML5 SQL数据库已经给出了异步api,但我想将它用于一个小商店永远不会大的小型webapp.因此不需要异步api,因为小商店上的查询将在客户端运行.所以我想编写一个带有sync api的ORM,以便开发人员可以更轻松地使用它.要将此异步桥接到同步api,我需要像睡眠这样的东西.
Rus*_*Cam 14
window.setTimeout或者window.setInterval几乎是你唯一的朋友.
如何使用setTimeout递归调用设置另一个超时的函数的示例如下
function go() {
if (go.count < 4) {
// logs 1, 2, 3 to firebug console at 1 second intervals
console.log(go.count++);
window.setTimeout(go, 1000);
}
}
go.count = 1;
go();
Run Code Online (Sandbox Code Playgroud)
window.clearTimeout如果需要在完成之前清除超时,可以选择捕获要使用的timeoutID .
请注意,既不阻止window.setTimeout也不window.setInterval阻止其他脚本的执行 - 我不相信这是可能的JavaScript当前的幌子.有些方法可以编码来模仿UI阻塞,例如使用showModalDialog或拥有一些全局blocking布尔值,这些布尔值几乎可以让我害怕.
@Russ Cam是正确的,setTimeout是你在寻找的.但是,你在问题中提到它的方式让我觉得可能会对如何使用它感到困惑.
它不会阻止它所处的块的执行,而是在一定的时间间隔后调用它的输入函数.作为说明:
function illustration() {
// start out doing some setup code
alert("This part will run first");
// set up some code to be executed later, in 5 seconds (5000 milliseconds):
setTimeout(function () {
alert("This code will run last, after a 5 second delay")
}, 5000);
// This code will run after the timeout is set, but before its supplied function runs:
alert("This will be the second of 3 alert messages to display");
}
Run Code Online (Sandbox Code Playgroud)
运行此功能时,您将看到三条警报消息,第二个和第三个之间有延迟:
澄清一下:问题是在一段时间内完全停止脚本执行,而不是延迟执行某些代码,这对于setTimeout或setInterval来说是一项任务.
一个干净的sleep()实现是不可能的,在JavaScript中也是不可取的.
setTimout和setInterval不会停止脚本执行,就像这里的一些人看起来顶级思考.刚刚注册了一个推迟运行的函数.超时/间隔等待时,脚本的其余部分将继续运行.
由于JavaScript的异步性质,"阻止"任何代码执行的唯一方法是非常难看且绝对不推荐的while循环运行一段时间.因为JavaScript本身在一个单独的线程中运行(我们这里不讨论WebWorkers API ......).这将阻止任何JS代码运行,直到该循环结束.但那真是糟糕的风格......
如果您的程序无法在没有睡眠()的情况下工作,也许您应该重新考虑您的方法.
| 归档时间: |
|
| 查看次数: |
34002 次 |
| 最近记录: |