当前位置:首页 > JavaScript

js实现睡眠

2026-02-01 14:30:30JavaScript

实现 JavaScript 睡眠的几种方法

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

使用 setTimeout 和 Promise

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

js实现睡眠

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

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

使用 setTimeout 回调

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

js实现睡眠

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 资源,不推荐用于生产环境。

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实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterv…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Jav…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现图片轮播

js实现图片轮播

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

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…