当前位置:首页 > JavaScript

js实现休眠

2026-03-13 16:27:04JavaScript

使用 setTimeoutPromise 实现休眠

在 JavaScript 中,原生没有直接提供类似 sleep() 的休眠函数,但可以通过 setTimeout 结合 Promise 实现类似功能。这种方法不会阻塞主线程,适合异步场景。

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)

在 Node.js 环境中,可以通过 Atomics.wait 实现真正的同步休眠,但这种方式会阻塞主线程,通常不建议在前端使用。

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

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

使用 while 循环模拟休眠(不推荐)

通过空循环消耗时间可以实现休眠效果,但会严重阻塞主线程,导致页面无响应,仅适用于极端测试场景。

js实现休眠

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

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

注意事项

  • 前端开发推荐使用 Promise + setTimeout 方案,兼容性好且不阻塞 UI
  • Atomics.wait 需要 Node.js 环境且对 SharedArrayBuffer 有安全限制
  • 避免使用忙等待方案,会导致性能问题
  • 现代浏览器支持 setTimeout 的嵌套超时最小延迟(通常 >=4ms)

标签: js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…