当前位置:首页 > JavaScript

js sleep 实现

2026-03-14 14:30:41JavaScript

使用 Promise 和 setTimeout

JavaScript 本身没有内置的 sleep 函数,但可以通过 Promise 和 setTimeout 实现类似功能。以下是一个简单的实现:

js sleep 实现

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

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

同步阻塞方式(不推荐)

虽然不推荐在生产环境中使用,但在某些测试场景可能需要同步阻塞:

js sleep 实现

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

// 使用示例
console.log('开始');
sleepSync(2000); // 会阻塞整个线程
console.log('2秒后');

使用 Atomics.wait

Node.js 环境中可以使用更底层的 API:

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

// 使用示例
console.log('开始');
sleep(2000);
console.log('2秒后');

使用 async/await 的循环延迟

对于需要重复执行的延迟操作:

async function delayedLoop() {
  for (let i = 0; i < 5; i++) {
    console.log(`计数: ${i}`);
    await new Promise(res => setTimeout(res, 1000));
  }
}
delayedLoop();

注意事项

  • 异步 sleep 不会阻塞事件循环,适合大多数场景
  • 同步 sleep 会完全阻塞 JavaScript 执行线程
  • Node.js 环境有更多选择如 util.promisify(setTimeout)
  • 浏览器环境中避免使用同步方法,会导致页面无响应

标签: jssleep
分享给朋友:

相关文章

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…