我知道,我知道,这不是一个好的设计。非阻塞 setTimeout 或 setInterval 是一种更好的方法,但要实现非阻塞,您需要重构整个代码以在我的场景中具有回调点。让我解释:
- 我有一个旨在从缓存(存储)中获取对象的函数
- 如果对象可用,我接受它
- 当对象不可用时,我请求它并通过轮询等待直到可用,并带有到期计数器/时间。在某一时刻(不太远)它将可用,然后我返回给调用者
我无法实现回调,因为调用链(堆栈)非常深且复杂,并且根本不可能重构所有代码以使用异步回调/等。在这种特定情况下,我真的需要一个单线程阻塞循环。
现在问题来了:
我不想简单地使用带计数器的简单 for 循环。这会消耗过多的 CPU 周期,并会导致计算机风扇启动(即使是几秒钟)。我正在寻找可以用作阻塞方法的最慢的 javascript 命令(或命令集)是什么,例如:
while ( needToContinue ) {
slowestCommandOrFunction();
needToContinue = checkIfNeedToContinue();
}