当前位置:首页 > JavaScript

js 实现睡眠

2026-03-13 23:40:51JavaScript

使用 Promise 和 setTimeout 实现睡眠

在 JavaScript 中实现睡眠功能可以通过 PromisesetTimeout 结合实现。这种方法不会阻塞主线程,适合在异步环境中使用。

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

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

使用 Atomics.wait 实现同步睡眠

如果需要实现同步睡眠(会阻塞主线程),可以使用 Atomics.wait。这种方法适用于 Worker 线程环境,不推荐在主线程使用。

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

// 使用示例
console.log('开始同步睡眠');
syncSleep(2000); // 同步睡眠2秒
console.log('同步睡眠结束');

使用 async/await 简化异步流程

对于需要连续睡眠的场景,async/await 语法可以让代码更清晰:

async function delayedLog() {
  console.log('第一次日志');
  await sleep(1000);
  console.log('1秒后的日志');
  await sleep(1500);
  console.log('再1.5秒后的日志');
}
delayedLog();

使用 Date 对象实现忙等待(不推荐)

虽然技术上可行,但忙等待会完全阻塞线程,严重影响性能:

js 实现睡眠

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

// 使用示例(会冻结页面)
console.log('开始忙等待');
busyWait(2000);
console.log('忙等待结束');

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

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现点击显示和隐藏

js实现点击显示和隐藏

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

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…