下面这个函数并没有像我想要的那样工作;作为一个JS新手,我不明白为什么。

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

目前,它不会等待,它只是直接检查。

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

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

当前回答

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

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

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

其他回答

创建这样一个以毫秒为单位等待的函数的最好方法是,这个函数将在参数中提供的毫秒内等待:

函数waitSeconds(imillisecseconds) { Var计数器= 0 , start = new Date().getTime() , end = 0; while (counter < imillisecseconds) { end = new Date().getTime(); Counter = end - start; } }

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

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

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

如果你有一个asyn函数,你可以这样做:

await new Promise(resolve => setTimeout(resolve, 5000));

这个解决方案来自React Native的刷新控件文档:

function wait(timeout) {
    return new Promise(resolve => {
        setTimeout(resolve, timeout);
    });
}

要将此应用于OP的问题,您可以使用此函数与await配合使用:

await wait(5000);
if (newState == -1) {
    alert('Done');
}

根据约瑟夫·西尔伯的回答,我会这样做,更一般一点。

你会得到你的函数(让我们根据问题创建一个函数):

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

你可以有一个等待函数:

function wait(milliseconds, foo, arg){
    setTimeout(function () {
        foo(arg); // will be executed after the specified time
    }, milliseconds);
}

最后你会有:

wait(5000, videoStopped, newState);

这是一个解决方案,我宁愿不使用参数在等待函数(只有foo();而不是foo(arg);)但这只是例子。