当前位置:首页 > JavaScript

js实现睡眠

2026-03-14 13:26:38JavaScript

使用 setTimeoutPromise 实现睡眠

在 JavaScript 中,可以通过 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 实现同步睡眠

对于需要同步睡眠的场景(通常不建议在主线程使用),可以使用 Atomics.wait。这种方法会真正阻塞线程,适用于 Worker 线程环境。

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

// 使用示例(注意:在主线程使用会冻结页面)
console.log('开始');
syncSleep(2000); // 同步等待2秒
console.log('结束');

使用 async/await 简化异步流程

结合 async/await 语法可以更清晰地组织需要睡眠的异步代码逻辑。

async function processWithSleep() {
  console.log('步骤1');
  await sleep(1000);

  console.log('步骤2');
  await sleep(1500);

  console.log('完成');
}
processWithSleep();

注意事项

  • 浏览器环境中的 setTimeout 最小延迟通常为 4ms(即使设置为 0ms)
  • Node.js 环境从版本 16 开始支持 timers/promises 模块的 setTimeout 直接返回 Promise
  • 同步睡眠会阻塞事件循环,网页中使用会导致界面冻结
  • Worker 线程中可以使用更精确的 performance.now() 配合循环实现忙等待(不推荐)

Node.js 专用方法

Node.js 15+ 版本可以直接使用 timers/promises 模块:

js实现睡眠

import { setTimeout } from 'timers/promises';

async function nodeSleep() {
  console.log('开始');
  await setTimeout(2000);
  console.log('结束');
}
nodeSleep();

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

相关文章

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现 拖动

js实现 拖动

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

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…