当前位置:首页 > JavaScript

js sleep实现

2026-03-14 15:20:34JavaScript

使用 Promise 和 setTimeout

在 JavaScript 中实现 sleep 功能可以通过 Promise 和 setTimeout 结合实现。这种方式是非阻塞的,适用于异步环境。

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

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

使用生成器函数

通过生成器函数和 yield 关键字可以实现类似 sleep 的效果。这种方法需要配合特定的执行器使用。

js sleep实现

function* sleepGenerator(ms) {
  yield new Promise(resolve => setTimeout(resolve, ms));
}

// 使用示例
const gen = sleepGenerator(2000);
gen.next().value.then(() => {
  console.log('等待完成');
});

同步阻塞方式(不推荐)

在浏览器环境中不推荐使用同步阻塞的方式,但在某些 Node.js 环境下可以通过循环实现。

js sleep实现

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

// 使用示例
console.log('开始阻塞');
sleepSync(2000);
console.log('阻塞结束');

使用 Atomics.wait

在支持 SharedArrayBuffer 的环境中,可以使用 Atomics.wait 实现精确的同步等待。

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

// 使用示例
console.log('原子等待开始');
sleepAtomics(2000);
console.log('原子等待结束');

使用 requestAnimationFrame

对于浏览器动画场景,可以使用 requestAnimationFrame 实现基于帧率的等待。

function sleepAnimationFrame(ms) {
  return new Promise(resolve => {
    const start = performance.now();
    function check(time) {
      if (time - start >= ms) {
        resolve();
      } else {
        requestAnimationFrame(check);
      }
    }
    requestAnimationFrame(check);
  });
}

// 使用示例
async function animate() {
  console.log('动画等待开始');
  await sleepAnimationFrame(2000);
  console.log('动画等待结束');
}
animate();

标签: jssleep
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js实现自举

js实现自举

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

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…