我希望通过在页面顶部放置一些JavaScript,以完全同步的方式阻止客户端JavaScript执行指定的毫秒数(例如 sleep )。
等待时不会发生任何事情。该页面不应继续加载。它应该没有响应。另外,如果可能的话,我想要1-10毫秒的精度,等待时间可以超过1000毫秒。
这个问题的标准“解决方案”是......提出一个不同的问题,因为这不是你通常想做的事情。你通常想要做的是await Promise.delay(1000)
。
所以我完全清楚这样做的问题,充分意识到这几乎在所有情况下都是一个糟糕的想法,但我仍然需要这样做。只是为了让你的灵魂放心,页面只会被无头浏览器使用,所以没有用户会在执行这个黑客时受到伤害。
问题的实际解决方案是:
while (expectedTime > Date.now()) { }
哪个效果很好。但是当我想做的只是告诉事件循环 stop 时,它会产生大量不必要计算的副作用。
我认为诀窍可能是强制页面在前几百毫秒内执行一些同步I / O然后采用上述策略,但我不确定如何实现这一点。我也可以使用服务器,如果有帮助的话。
答案 0 :(得分:-1)
尝试使用async/await
语法,看看这个。
async function stop_fn() {
var a = 99999999
var b = 11111111
console.log('hello there')
//This will stop the execution without CPU blocking
await new Promise(next=> setTimeout(()=> next(), 4000))
console.log('After 4000ms', a)
//Another 4000ms stop
await new Promise(next=> setTimeout(()=> next(), 4000))
console.log('after 4000ms more, please stop it', b)
return 'end of this'
}
stop_fn()
答案 1 :(得分:-1)
//random blocking function
function blockCpu(ms) {
var now = new Date().getTime();
while(true) {
if (new Date().getTime() > now +ms)
return;
}
}