当前位置:首页 > JavaScript

js实现休眠

2026-01-31 18:32:37JavaScript

使用 setTimeoutPromise 实现休眠

在 JavaScript 中可以通过 setTimeout 结合 Promise 实现休眠功能。这种方式是非阻塞的,适用于异步环境。

js实现休眠

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

// 使用示例
async function demo() {
  console.log('开始休眠');
  await sleep(2000); // 休眠2秒
  console.log('休眠结束');
}
demo();

使用 Atomics.wait 实现同步休眠

对于需要同步休眠的场景(如在 Node.js 或 Web Worker 中),可以使用 Atomics.wait API。这种方式会阻塞主线程。

js实现休眠

function sleepSync(ms) {
  const sharedArray = new Int32Array(new SharedArrayBuffer(4));
  Atomics.wait(sharedArray, 0, 0, ms);
}

// 使用示例
console.log('开始同步休眠');
sleepSync(3000); // 同步休眠3秒
console.log('同步休眠结束');

使用 Date 对象实现忙等待

虽然不推荐,但在某些特殊情况下可以使用基于 Date 的忙等待实现休眠。这种方式会持续占用 CPU。

function busySleep(ms) {
  const start = Date.now();
  while (Date.now() - start < ms) {}
}

// 使用示例
console.log('开始忙等待');
busySleep(1000); // 忙等待1秒
console.log('忙等待结束');

注意事项

  • 在浏览器环境中,主线程的同步休眠会冻结 UI,应优先使用 Promise 方案
  • Atomics.wait 需要运行在支持 SharedArrayBuffer 的环境中
  • 忙等待方案会严重影响性能,仅适用于特殊测试场景
  • Node.js 环境下可以考虑使用 setImmediateprocess.nextTick 进行微调

标签: js
分享给朋友:

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…