当前位置:首页 > JavaScript

js实现sleep

2026-01-31 19:22:55JavaScript

实现 sleep 函数的几种方法

在 JavaScript 中,由于语言本身没有内置的 sleep 函数,但可以通过多种方式模拟实现类似功能。

使用 setTimeout 和回调

通过 setTimeout 和回调函数实现延迟执行:

function sleep(ms, callback) {
    setTimeout(callback, ms);
}

// 使用示例
console.log('开始');
sleep(2000, () => {
    console.log('2秒后执行');
});

使用 Promise 和 async/await

利用 Promise 和 async/await 语法实现更优雅的 sleep 功能:

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

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

使用生成器函数

通过生成器函数和 yield 实现类似协程的效果:

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

// 使用示例
const sleep = sleepGenerator(2000);
sleep.next().value.then(() => {
    console.log('2秒后执行');
});
console.log('开始');

使用 Atomics.wait

在 Node.js 环境中,可以使用 Atomics API 实现真正的阻塞:

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

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

使用 busy-waiting(不推荐)

通过循环检查时间实现的 busy-waiting,会阻塞主线程:

js实现sleep

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

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

注意:最后两种方法会阻塞主线程,通常不建议在前端使用。推荐使用 Promise 和 async/await 的方式,既清晰又不会阻塞 UI 线程。

标签: jssleep
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…