当前位置: 首页 > 知识库问答 >
问题:

等待5秒钟,然后执行下一行

许奇
2023-03-14

下面的函数不能像我希望的那样工作;作为一个JS新手,我不明白为什么。

我需要它等待5秒钟,然后检查newState是否为-1

目前,它不等待,只是立即检查。

function stateChange(newState) {
  setTimeout('', 5000);

  if(newState == -1) {
    alert('VIDEO HAS STOPPED');
  }
}

共有3个答案

严阳秋
2023-03-14

您真的不应该这样做,正确使用timeout是解决OP问题和任何其他您只想在一段时间后运行某个东西的情况的正确工具。约瑟夫·西尔伯在他的回答中很好地证明了这一点。然而,如果在一些非生产性的情况下,您真的想要将主线程挂起一段时间,那么这就可以了。

function wait(ms){
   var start = new Date().getTime();
   var end = start;
   while(end < start + ms) {
     end = new Date().getTime();
  }
}

以执行的形式:

console.log('before');
wait(7000);  //7 seconds in milliseconds
console.log('after');

我来到这里是因为我正在构建一个简单的测试用例,用于围绕长时间运行的阻塞操作(即昂贵的DOM操作)对异步操作的混合进行排序,这是我的模拟阻塞操作。它非常适合这项工作,所以我想我把它发布给任何带着类似用例来到这里的人。即便如此,它还是在同时循环中创建了一个Date()对象,如果运行时间足够长,它可能会淹没GC。但是我怎么强调都不为过,这只适用于测试,对于构建任何实际功能,你应该参考Joseph Silber的答案。

司马彬
2023-03-14

下面是使用新的async/wait语法的解决方案。

确保检查浏览器支持,因为这是ECMAScript 6引入的语言功能。

效用函数:

const delay = ms => new Promise(res => setTimeout(res, ms));

使用方法:

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};

这种方法的优点是,它使代码的外观和行为与同步代码类似。

郎和志
2023-03-14

您必须将代码放在您提供给setTimeout的回调函数中:

function stateChange(newState) {
    setTimeout(function () {
        if (newState == -1) {
            alert('VIDEO HAS STOPPED');
        }
    }, 5000);
}

任何其他代码将立即执行。

 类似资料:
  • 问题内容: 在 puppeteer中, 我想等待定义的时间后再转到下一行代码。 我尝试将a 放入评估函数中,但似乎只是被忽略了 此代码不等待,仅 在等待之前 和 之后 编写 __ 你知道怎么做吗? 问题答案: 您可以使用一点承诺功能, 然后,在需要延迟的任何时候调用它。 如果必须使用操纵符,请使用内置的waitFor函数。 如果仍然要使用page.evaluate,请在4​​秒钟后解决。您没有解决

  • 问题内容: 我是python的n00b用户,并且正在查找执行以下操作的代码段/示例: 显示类似“按任意键进行配置或等待X秒继续”的消息 例如,等待5秒钟,然后继续执行,或者如果按下某个键,则输入configure()子例程。 感谢您的帮助! 伊万·詹森斯(Yvan Janssens) 问题答案: 如果您使用的是Unix / Linux,那么select模块将为您提供帮助。 如果您使用的是Windo

  • 问题内容: 我只是在寻找一个简单的计时器,可以让我的页面在30秒后运行脚本。 这个想法是用户有30秒的时间提交答案,否则页面将运行脚本并将其带到“对不起,太慢”的样式页面。 我无法为此找到正确的php函数,但是基本上我们像这样: 感谢您的帮助,布雷特 问题答案: 您可以使用setTimeout()在Javascript中执行此操作;

  • 我想知道是否有办法做到这一点,没有任何混乱或混乱。另外,当我执行方法时,它有一个错误。

  • 问题内容: 我有多个ajax查询同时运行,我希望它们等待最后一个返回,然后在所有ajax调用上运行成功处理程序。作为简化示例,请考虑: 假设所有请求都同时发送。由于它们是异步的,因此它们将在不同的时间返回。假设一个请求返回需要100毫秒,而另一个请求则需要3000毫秒。我显然不知道哪个会最先返回。他们都以某种方式更新了DOM,我希望一次将这些更改一次全部显示给查看器。我该怎么做呢? 我能想到的最好

  • 这是我第一次在项目中使用Java,我需要这样做: 发送CoAP POST请求以打开致动器 但它抛出一个错误无法到达的语句,我不明白为什么:(