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

下面的此功能无法正常运行。作为JS新手,我不知道为什么。


我需要等待5秒钟再检查是否newState为-1。


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


function stateChange(newState) {

  setTimeout('', 5000);


  if(newState == -1) {

    alert('VIDEO HAS STOPPED');

  }

}


莫回无
浏览 804回答 3
3回答

桃花长相依

您必须将代码放入提供给的回调函数中setTimeout:function stateChange(newState) {    setTimeout(function () {        if (newState == -1) {            alert('VIDEO HAS STOPPED');        }    }, 5000);}任何其他代码将立即执行。

交互式爱情

您确实不应该这样做,正确使用超时是解决OP问题以及在一段时间后只想运行某些东西的正确工具。约瑟夫·西尔伯(Joseph Silber)的回答很好地证明了这一点。但是,如果在某些非生产情况下您确实想将主线程挂起一段时间,则可以这样做。function wait(ms){&nbsp; &nbsp;var start = new Date().getTime();&nbsp; &nbsp;var end = start;&nbsp; &nbsp;while(end < start + ms) {&nbsp; &nbsp; &nbsp;end = new Date().getTime();&nbsp; }}以以下形式执行:console.log('before');wait(7000);&nbsp; //7 seconds in millisecondsconsole.log('after');我到达这里是因为我正在构建一个简单的测试用例,用于围绕长时间运行的阻塞操作(即昂贵的DOM操作)对异步操作的混合进行排序,这是我的模拟阻塞操作。它非常适合该工作,因此我认为我会将其发布给其他使用类似用例的人。即使这样,它也会在while循环中创建一个Date()对象,如果运行足够长的时间,这可能会使GC感到不知所措。但是我不能强调太多,这仅适合测试,要构建任何实际功能,应参考Joseph Silber的答案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript