NodeJS如何优雅的实现Sleep休眠

 更新时间:2024年09月05日 08:49:29   作者:HumorChen99  
这篇文章主要介绍了NodeJS如何优雅的实现Sleep休眠问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

NodeJS实现Sleep休眠

先打印1,然后1.5秒后打印2

/*
休眠函数sleep
调用 await sleep(1500)
 */
function sleep(ms) {
    return new Promise(resolve=>setTimeout(resolve, ms))
}
async function main() {
    console.log(1)
    await sleep(1500)
    console.log(2)
}
main()

NodeJS实现一个真正的Sleep,Sleep期间不影响其它线程执行

Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境,它采用了单线程、事件驱动和非阻塞I/O模型。

由于JavaScript是单线程的,传统意义上的线程睡眠(如Java中的Thread.sleep)在Node.js中并不适用,因为那会阻塞整个事件循环,从而影响其他所有任务的执行。

然而,如果你希望实现一个“sleep”效果,同时不阻碍其他异步操作的进行,你可以使用Promise结合setTimeout来模拟异步等待的效果。

这样,你可以在等待期间让出事件循环给其他任务处理,模拟并发执行的效果。

以下是一个简单的示例:

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

async function yourAsyncFunction() {
    console.log('开始执行');
    await sleep(2000); // 模拟“sleep”2秒
    console.log('2秒后继续执行');
}

yourAsyncFunction();

console.log('这句代码会立即打印,不会被sleep阻塞');

在这个例子中,sleep函数返回一个Promise,这个Promise在指定的毫秒数后解析,从而允许使用await关键字在异步函数中“等待”,而不会阻塞其他代码的执行。

console.log('这句代码会立即打印,不会被sleep阻塞')会立即执行,不受sleep影响,体现了非阻塞特性。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何使用 Node.js 将 MongoDB 连接到您的应用程序

    如何使用 Node.js 将 MongoDB 连接到您的应用程序

    NoSQL 数据库对于处理大量分布式数据非常有用,我们可以在这个数据库中存储信息,对其进行管理,这篇文章主要介绍了使用 Node.js 将 MongoDB 连接到您的应用程序,需要的朋友可以参考下
    2022-09-09
  • node使用UEditor富文本编辑器的方法实例

    node使用UEditor富文本编辑器的方法实例

    本篇文章主要介绍了node使用UEditor富文本编辑器的方法实例,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • json对象及数组键值的深度大小写转换问题详解

    json对象及数组键值的深度大小写转换问题详解

    这篇文章主要给大家介绍了关于json对象及数组键值的深度大小写转换问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • 深入浅析Node.js单线程模型

    深入浅析Node.js单线程模型

    Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程、高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这个问题来探讨Node.js的单线程模型
    2017-07-07
  • node.js版本管理工具n无效的原理和解决方法

    node.js版本管理工具n无效的原理和解决方法

    大家都知道在Centos中一般需要根据项目的环境安装指定版本的Node, 而现有的yum源版本一般不够全面也不一定找的到所需要的指定版本, 此时就必须自行下载Node源码进行编译安装了,如果你在使用node.js版本管理工具n的时候发现工具无效,下面就来看看这篇文章的解决方法吧。
    2016-11-11
  • 详解一些适用于Node.js的命名约定

    详解一些适用于Node.js的命名约定

    这篇文章主要介绍了详解一些适用于Node.js的命名约定,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Node.js中path模块操作路径的基本使用

    Node.js中path模块操作路径的基本使用

    这篇文章主要介绍了Node.js中path模块操作路径的基本使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Mac下安装node.js及环境配置全过程

    Mac下安装node.js及环境配置全过程

    这篇文章主要介绍了Mac下安装node.js及环境配置全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • nodejs更新package.json中的dependencies依赖到最新版本的方法

    nodejs更新package.json中的dependencies依赖到最新版本的方法

    今天小编就为大家分享一篇nodejs更新package.json中的dependencies依赖到最新版本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Node.js插件的正确编写方式

    Node.js插件的正确编写方式

    正如Node.js在官方说明文档中所言,插件是以动态方式进行链接的共享式对象,能够将JavaScript代码与C/C++库接驳起来。这意味着我们可以引用任何来自C/C++库中的内容,并通过创建插件的方式将其纳入到Node.js当中。
    2014-08-08

最新评论