javascript - javascript 中需要阻塞 sleep

标签 javascript

我知道,我知道,这不是一个好的设计。非阻塞 setTimeout 或 setInterval 是一种更好的方法,但要实现非阻塞,您需要重构整个代码以在我的场景中具有回调点。让我解释一下:

  1. 我有一个函数,旨在从缓存(存储)中获取对象
  2. 如果该对象可用,我就会接受
  3. 当对象不可用时,我会请求它并通过轮询等待直到可用,并带有过期计数器/时间。在某个时刻(不太远)它将可用,然后我返回调用者

无法实现回调,因为调用链(堆栈)非常深且复杂,并且根本不可能重构所有代码以使用异步回调等。在这种特定情况下,我确实需要一个单线程阻塞循环。

现在问题来了:

我不想简单地使用带有计数器的简单 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/

相关文章:

javascript - Cropit 将 Canvas 图像上传到 NodeJS

javascript - Q - Javascript promise 等待数组被填充

Javascript 禁用调整大小选项

javascript - IntelliJ 14 使用 JS 和 CSS 查找用法/重构

javascript - 如何使用 JavaScript 粘贴原始二进制文件而不出现 `Invalid character` 错误?

javascript - 使用 localStorage 简化代码

javascript - 检测空闲的 Silverlight 应用程序

javascript - 在 JavaScript 中验证 GUID

javascript - 执行一个函数5秒

javascript - 我可以使用 Jquery UI datepicker 更改键盘输入日期的格式吗?