在Javascript中的sleep()

9 浏览
0 Comments

在Javascript中的sleep()

这个问题已经有答案了

什么是JavaScript中的sleep()函数的版本?

假设我因为某些奇怪的原因想要阻止JavaScript执行一段时间,我该如何做到这一点。JS中没有sleep()函数。请不要说使用while()循环,因为那样做不好。我可以使用window.showModalDialog,在模态对话框中使用一个极短时间的setTimeout并在其中放置一个window.close,以便用户不会注意到对话框。这将类似于小时间段的sleep,并且如果需要,我可以多次调用它。还有其他方法吗?

更具体地讲,我的用例是HTML5 SQL Database提供了异步api,但我想在一个小型webapp中使用它,因为存储将永远不会很大。因此,不需要异步api,因为小型存储的查询将在客户端上运行。因此,我想编写一个带有同步api的ORM,以便开发人员可以更轻松地使用它。为了将这种异步转换为同步api,我需要类似于sleep的东西。

admin 更改状态以发布 2023年5月23日
0
0 Comments

@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");
}

当你运行这个函数时,你将看到三个警告消息,第二个和第三个之间有一个延迟:

  1. “这部分将首先运行”
  2. “这将是要显示的3个警告消息中的第二个”
  3. “这段代码将在5秒延迟后运行最后”
0
0 Comments

window.setTimeoutwindow.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();

如果需要在超时结束之前清除超时,可以选择捕获timeoutID使用window.clearTimeout

请注意,window.setTimeoutwindow.setInterval都不会阻塞其他脚本的执行——我不认为这在JavaScript的当前状态下是可能的。有些方法可以编码以模拟UI阻塞,例如使用showModalDialog或具有一些全局的blocking布尔值,但这大概就是你可以得到的了。抱歉。

0