js sleep 实现方式

devtools/2024/9/23 4:37:23/

在JavaScript中,由于其单线程和事件驱动的特性,没有直接的sleep函数,但你可以通过一些方法模拟出类似的效果。最常见的方式是使用setTimeout或者setInterval,以及更现代的Promiseasync/await语法来实现异步等待。下面是几种实现sleep函数的方法:

使用setTimeout

基本的setTimeout方法不直接返回等待完成的结果,但可以用于简单的延迟执行:

javascript">function sleep(ms) {setTimeout(() => {}, ms);
}// 使用示例,但请注意这不会阻塞代码执行
console.log('Start sleeping');
sleep(2000);
console.log('This will be printed immediately, not after 2 seconds');

使用Promise

为了能够更好地控制异步流程,可以将setTimeout封装进一个返回Promise的函数中:

javascript">function sleep(ms) {return new Promise(resolve => setTimeout(resolve, ms));
}// 使用示例,结合async/await
async function demo() {console.log('Start sleeping');await sleep(2000);console.log('Awake after 2 seconds');
}demo();

在这个示例中,sleep函数返回一个Promise,当延时时间到达后,Promise会被resolve,从而允许通过await关键字在async函数内部等待这个异步操作完成。

基于Generator的实现(较旧的方法)

虽然现代JavaScript推荐使用async/await,但在ES6引入Generator函数之前,也可以通过这种方式模拟sleep效果:

javascript">function* sleep(ms) {yield new Promise(resolve => setTimeout(resolve, ms));
}function run() {const gen = sleep(2000);gen.next().value.then(() => {console.log('Awake after 2 seconds');});
}run();

这种方法不如async/await简洁,但在某些场景下仍然有用。

注意事项

  • sleep函数的这些实现都是非阻塞的,意味着它们不会阻止其他JavaScript代码的执行。在事件循环中,它们会让出控制权,等待指定时间后再继续执行后续代码。
  • 使用async/await可以使异步代码看起来更像是同步代码,提高可读性和可维护性。

http://www.ppmy.cn/devtools/42112.html

相关文章

QT状态机4-使用并行状态来避免组合爆炸

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent):

内网安全工具之ADExplorer的使用

ADExplorer是域内一款信息查询工具,它是独立的可执行文件,无需安装。它能够列出域组织架构、用户账号、计算机账号登,可以帮助寻找特权用户和数据库服务器等敏感目标。 下载地址:http://live.sysinternals.com/ 连接 下载了ADE…

第八十二章 将 Web 应用程序与远程 Web 服务器结合使用 - 访问多个 IRIS 服务器上的 CSP

文章目录 第八十二章 将 Web 应用程序与远程 Web 服务器结合使用 - 访问多个 IRIS 服务器上的 CSP为应用程序路径配置 IRIS 服务器更改 URL 中的 IRIS 服务器名称 第八十二章 将 Web 应用程序与远程 Web 服务器结合使用 - 访问多个 IRIS 服务器上的 CSP 如果需要配置一台 Web …

[muduo网络库]——muduo库InetAddress类(剖析muduo网络库核心部分、设计思想)

接着之前我们[muduo网络库]——muduo库EventLoopThreadPool类(剖析muduo网络库核心部分、设计思想),我们接着看完除去TcpServer的最后一个InetAddress类。InetAddress 类是 muduo 网络库中的一个重要类,用于表示网络中的 IP 地址和…

PostgreSQL查看sql的执行计划

PostgreSQL查看sql的执行计划 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777在PostgreSQL中,查看…

项目-坦克大战

增加功能 我方坦克在发射的子弹消亡后,才能发射新的子弹。同时实现发多颗子弹 1,在按下J键,我们判断当前hero对象的子弹,是否已经销毁2,如果没有销毁,就不去触发shotEnemyTank3,如果已经销毁&…

list使用

C的list是C STL(标准模板库)中的容器,它是一个双向链表,允许在容器的任意位置进行快速插入和删除操作。list的特点是它能够以O(1)的时间复杂度在容器的任意位置插入和删除节点。 使用list需要包含头文件,并且使用std命…

【寒枫顾辞老航小说传】第一回:梦回大唐

在秋日的黄昏,枫叶如烈火般燃烧,寒枫、老航和阿辞,三位好友坐在公园的长椅上,谈笑风生。他们相识多年,性格迥异,却情同手足。寒枫温文尔雅,老航机智幽默,阿辞则豪放不羁。这一天&…