我知道,我知道,这不是一个好的设计。非阻塞 setTimeout 或 setInterval 是一种更好的方法,但要实现非阻塞,您需要重构整个代码以在我的场景中具有回调点。让我解释一下:
- 我有一个函数,旨在从缓存(存储)中获取对象
- 如果该对象可用,我就会接受
- 当对象不可用时,我会请求它并通过轮询等待直到可用,并带有过期计数器/时间。在某个时刻(不太远)它将可用,然后我返回调用者
我无法实现回调,因为调用链(堆栈)非常深且复杂,并且根本不可能重构所有代码以使用异步回调等。在这种特定情况下,我确实需要一个单线程阻塞循环。
现在问题来了:
我不想简单地使用带有计数器的简单 for 循环。这会消耗太多的 CPU 周期,并会导致计算机风扇启动(即使持续几秒钟)。我正在寻找可以用作阻塞方法的最慢的 javascript 命令(或命令集),例如:
while ( needToContinue ) {
slowestCommandOrFunction();
needToContinue = checkIfNeedToContinue();
}
最佳答案
听起来您想要同步一个ajax请求。您可以使用 XMLHttpRequest.open
的第三个参数来执行此操作:
xhr.open('GET', url, false);
不过,我仍然建议您花时间重构代码。
关于javascript - javascript 中需要阻塞 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15041658/