当前位置:首页 > JavaScript

js实现睡眠

2026-02-01 14:30:30JavaScript

实现 JavaScript 睡眠的几种方法

在 JavaScript 中实现睡眠(延迟执行)可以通过以下几种方式实现:

使用 setTimeout 和 Promise

通过结合 setTimeout 和 Promise 可以创建一个异步的睡眠函数,适用于现代 JavaScript 环境(ES6+)。

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

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

使用 setTimeout 回调

传统的回调方式,适用于不支持 Promise 的环境。

function sleep(ms, callback) {
  setTimeout(callback, ms);
}

// 使用示例
console.log('开始睡眠');
sleep(2000, function() {
  console.log('睡眠结束');
});

使用 Atomics.wait(同步阻塞)

Atomics.wait 可以实现同步阻塞睡眠,但通常不推荐在主线程中使用,因为它会完全阻塞线程。

function sleep(ms) {
  const sharedArrayBuffer = new SharedArrayBuffer(4);
  const view = new Int32Array(sharedArrayBuffer);
  Atomics.wait(view, 0, 0, ms);
}

// 使用示例
console.log('开始睡眠');
sleep(2000); // 阻塞 2 秒
console.log('睡眠结束');

使用 async/await 循环

通过循环检查时间差实现精确睡眠,但会占用 CPU 资源,不推荐用于生产环境。

js实现睡眠

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

// 使用示例
console.log('开始睡眠');
sleep(2000); // 阻塞 2 秒
console.log('睡眠结束');

注意事项

  • 推荐使用 PromisesetTimeout 的方式,因为它不会阻塞主线程。
  • 避免在主线程中使用同步阻塞方法(如 Atomics.wait 或循环检查),否则会导致页面无响应。
  • 在 Node.js 环境中,还可以使用 util.promisify 结合 setTimeout 实现睡眠功能。

标签: 睡眠js
分享给朋友:

相关文章

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…