下面这个函数并没有像我想要的那样工作;作为一个JS新手,我不明白为什么。
我需要它等待5秒,然后检查newState是否为-1。
目前,它不会等待,它只是直接检查。
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
下面这个函数并没有像我想要的那样工作;作为一个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);
}
任何其他代码将立即执行。
其他回答
这个解决方案来自React Native的刷新控件文档:
function wait(timeout) {
return new Promise(resolve => {
setTimeout(resolve, timeout);
});
}
要将此应用于OP的问题,您可以使用此函数与await配合使用:
await wait(5000);
if (newState == -1) {
alert('Done');
}
试试这个:
//the code will execute in 1 3 5 7 9 seconds later
function exec() {
for(var i=0;i<5;i++) {
setTimeout(function() {
console.log(new Date()); //It's you code
},(i+i+1)*1000);
}
}
像这样使用延迟函数:
var delay = ( function() {
var timer = 0;
return function(callback, ms) {
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
用法:
delay(function(){
// do stuff
}, 5000 ); // end delay
学分:如何延迟.keyup()处理程序,直到用户停止输入?
你必须把你的代码放在你提供给setTimeout的回调函数中:
function stateChange(newState) {
setTimeout(function () {
if (newState == -1) {
alert('VIDEO HAS STOPPED');
}
}, 5000);
}
任何其他代码将立即执行。
如果你在一个异步函数中,你可以简单地在一行中完成:
console.log(1);
await new Promise(resolve => setTimeout(resolve, 3000)); // 3 sec
console.log(2);
供你参考,如果目标是NodeJS,你可以使用这个内置函数(这是一个预定义的setTimeout函数):
import { setTimeout } from 'timers/promises';
await setTimeout(3000); // 3 sec