JavaScript wait()函数

31

我想创建一个JavaScript的wait()函数。

我应该编辑什么?

function wait(waitsecs) {
    setTimeout(donothing(), 'waitsecs');
}

function donothing() {
    //
}


你可能想要的是 setTimeout(donothing(), waitsecs); 但我不知道这样做的意义所在。setTimeout 不会阻塞,也不应该创建自旋等待。https://dev59.com/jnNA5IYBdhLWcg3wdtpd - Matt Ball
一个更好的问题是,你为什么想要有“等待”函数? - Explosion Pills
你的代码应该在: - Dharmendrasinh Chudasama
相关:https://dev59.com/hXM_5IYBdhLWcg3w-4hg - Paul Razvan Berg
3
我不知道为什么这被标记为对未来用户没有帮助。它曾在2020年救了我的命。 - TizzyFoe
显示剩余2条评论
2个回答

66

Javascript不是线程化的,因此“等待”将冻结整个页面(可能会导致浏览器完全停止运行脚本)。

要针对您的问题进行特定处理,您应该在setTimeout调用中删除donothing后面的括号,并使waitsecs成为数字而不是字符串:

console.log('before');
setTimeout(donothing,500); // run donothing after 0.5 seconds
console.log('after');

但这并不会停止执行;"after"将在您的函数运行之前被记录。

为了正确等待,你可以使用匿名函数:

console.log('before');
setTimeout(function(){
    console.log('after');
},500);

在“after”部分,您的所有变量仍将存在。您不应链接它们-如果发现自己需要这样做,则需要查看如何构建程序。此外,如果需要循环,您可能想要使用 setInterval / clearInterval


这个正确吗?setTimeout(()=>{}, 500) - berriz44

4

你不应该编辑它,而是应该完全废弃它。

任何试图让执行停止一段时间的尝试都会锁定浏览器并将其切换到“未响应”状态。唯一能做的就是正确使用setTimeout


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接