JavaScrip实现一个睡眠函数

说在前面

🎈在 Java 和 Python 中,有专门用于睡眠的函数,分别是 Thread.sleep() 和 time.sleep()。那么JavaScrip能不能也实现一个呢?

题目描述

请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠 millis 毫秒。要求此函数可以解析任何值。

示例 1:

输入:millis = 100
输出:100
解释:
在 100ms 后此异步函数执行完时返回一个 Promise 对象
let t = Date.now();
sleep(100).then(() => {console.log(Date.now() - t); // 100
});

示例 2:

输入:millis = 200
输出:200
解释:在 200ms 后函数执行完时返回一个 Promise 对象

提示:

  • 1 <= millis <= 1000

解题思路

函数内部,它返回一个 Promise 对象。该 Promise 在指定的毫秒数后会被解析(resolve)。

通过调用 setTimeout 函数,我们在指定的毫秒数后调用 resolve 函数,从而解析 Promise。

示例中给出了如何使用 sleep 函数来实现延迟操作。通过调用 sleep(100),我们创建了一个等待 100 毫秒的 Promise。然后,通过调用 .then() 方法,我们设置了当 Promise 解析后的回调函数,它会打印出从等待开始到回调执行时的时间差。

注意

setTimeout 函数存在一定的误差,因为它依赖于浏览器或 Node.js 的事件循环机制。这意味着在某些情况下,setTimeout 可能会比预期的时间稍微早或稍微晚一些执行。

这种误差主要由于以下几个原因:

  • 1、系统负载:如果系统负载较高,事件循环可能无法及时调用 setTimeout 中指定的回调函数。
  • 2、其他任务的阻塞:如果在 setTimeout 回调函数执行之前有其他耗时的任务正在进行,那么 setTimeout 的执行可能会被延迟。
  • 3、最小延迟时间:在浏览器环境中,setTimeout 的最小延迟时间通常是 4 毫秒(不同浏览器可能有所不同),这意味着设置更小的延迟时间也会被自动调整为最小延迟时间。

如果对于精确的时间控制非常重要,可以考虑使用更精确的时间管理方法,例如使用 requestAnimationFrame 或 setInterval 来实现定时操作。另外,还可以使用第三方库或工具来提供更精确的定时功能,如 lodash 的 debounce 和 throttle 方法。

总之,需要注意 setTimeout 并不是一个完全准确的定时器,它可能会有一些误差。在编写代码时,应该考虑到这些因素,并根据具体需求选择合适的方案。

AC代码

/*** @param {number} millis* @return {Promise}*/
async function sleep(millis) {return new Promise((resolve) => {setTimeout(() => {resolve();}, millis);});
}/*** let t = Date.now()* sleep(100).then(() => console.log(Date.now() - t)) // 100*/

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVS 内置器件

以下是calibre lvs中内置器件的名称 Built_in_typeComponent Name描述NMOSMNCMOS N型晶体管PMOSMPCMOS P型晶体管ENH or ENHANCEMENTMENMOS增强型晶体管DEPL or DEPLETIONMDNMOS耗尽型晶体管MOSMMOS通用晶体管LDDNMOSLDDNCMOS轻掺杂漏极N型晶体管LDDPMOSLDDPCMOS轻掺杂漏极P型…

Java基础之虚拟机

1、前言 本篇基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、什么是虚拟机&#xff1f; Java 虚拟机&#xff0c;是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件( .class )。 Java 被设计成允许应用程序可以运…

格密码基础:SIS问题的定义与理解

目录 一. 介绍 二. SIS问题定义 2.1 直观理解 2.2 数学定义 2.3 基本性质 三. SIS与q-ary格 四. SIS问题的推广 五. Hermite标准型 六. 小结 一. 介绍 short interger solution problem短整数解问题&#xff0c;简称SIS问题。 1996年&#xff0c;Ajtai首次提出SIS问…

【数据结构】排序算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f38f;排序的定义 &#x1f38f;排序的稳定性 &#x1f4cc;稳定性的定义 &#x1f4cc;稳定性的意义 &#x1f38f;内排序与外排序 &#x1f38f;八大内排…

GitHub图床搭建

1 准备Github账号 如果没有Github账号需要先在官网注册一个账号 2 创建仓库 在github上创建一个仓库&#xff0c;随便一个普通的仓库就行&#xff0c;选择公共仓库 3 github token获取 github token创建方式可以参考下面的方式&#xff1a; https://www.xichangyou.com/6…

c/c++中static的用法

概述 static&#xff1a; 作为c/c的关键字之一&#xff0c;具有多种含义和应用&#xff0c;static 关键字可用于声明变量、函数、类数据成员和类函数。默认情况下&#xff0c;在所有块的外部定义的对象或变量具有静态持续时间和外部链接。 静态持续时间意味着&#xff0c;在程…

MT1138-MT1150总结

1. 判断闰年方法 year%40&&year%400&#xff01;0||year%4000 #include<bits/stdc.h> using namespace std;int day(int year,int mouth){if(mouth1||mouth3||mouth5||mouth7||mouth8||mouth10||mouth12){return 31;}else if(mouth4||mouth6||mouth9||mouth11)…

Golang 三数之和 leetcode15 双指针法

三数之和 leetcode15 知识补充&#xff1a; map的key值必须是可以比较运算的类型&#xff0c;不可以是函数、map、slice map记录 失败&#xff01;超出限制 //得到结果后再去重 失败&#xff01; func threeSum(nums []int) [][]int {L : len(nums)var intT stringresult : […

python使用贪心算法求最大整数问题

对于使用贪心算法的一个比较经典的问题&#xff0c;主要是为了解决最大整数的拼接问题&#xff0c;如果给定一个列表&#xff0c;这个列表中所包括的是一些非负整数&#xff0c;如果对这些整数进行组合&#xff0c;怎样才能组合出一个最大的整数&#xff0c;这里要注意一个问题…

1.2MATLAB数据类型和常用函数

MATLAB数据类型 数据类型表示范围整型 无符号整数8位无符号整数00000000~11111111 &#xff08;0~-1&#xff09;16位无符号整数32位无符号整数64位无符号整数带符号整数8位带符号整数10000000~01111111 (~)最左边的1表示符号负号16位带符号整数32位带符号整数64位带符号整数浮…

解决No module named ’torch._six‘问题

如果是 deepspeed &#xff0c;解决方法&#xff1a; deepspeed 安装 Windows deepspeed 安装 Windows-CSDN博客

【C++】内联函数

前言 在C语言中&#xff0c;我们学习过宏的用法。宏通常被用于进行简单的文本替换来执行一系列的操作&#xff0c;比如一些简单的运算。使用宏可以避免函数调用时建立栈帧的开销&#xff0c;提高程序的性能。我们首先来写一个实现加法功能的宏&#xff1a; #define ADD(x, y)…

【我的RUST库】get_local_info 0.2.2发布

0.2.2增加在cargo上的github链接&#xff0c;地址&#xff1a; get_local_info - crates.io: Rust Package Registry

物理学如何推动生成式 AI 的发展

一、说明 许多尖端的生成式 AI 模型都受到物理学概念的启发。在本指南中&#xff0c;我们将从高层次上了解物理学如何推动人工智能的进步。不同的领域经常交叉授粉重要概念&#xff0c;这有助于推动其进步。数学概念为物理学的进步奠定了基础;物理学中的概念经常启发经济学的框…

紫外加速老化试热冲击试验箱

紫外加速老化试热冲击试验箱是用于测试产品在高低温环境下的适应性以及性能表现的实验设备。其功能特点主要包括以下几个方面&#xff1a; 1. 温度控制&#xff1a;冷热冲击试验箱能够提供高温、低温以及常温的测试环境&#xff0c;并且可以快速地实现温度的转换和控制。这使得…

高效办公:如何通过在文件名称右边添加关键字提升工作效率

在繁忙的办公环境中&#xff0c;经常要处理大量的文件和资料。那如何管理和查找这些文件呢&#xff0c;常见的方法有在文件名称右边添加关键字。下面来看云炫文件管理器如何通过在文件名称右边添加关键字来提升工作效率。 在文件名称右边添加关键字前后效果图。 文件名批量添加…

老卫带你学---leetcode刷题(38. 外观数列)

38. 外观数列 问题 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) “1” c…

P5461 赦免战俘题解

题目 现有2n2n(n≤10) 名作弊者站成一个正方形方阵等候kkksc03的发落。kkksc03决定赦免一些作弊者。他将正方形矩阵均分为4个更小的正方形矩阵&#xff0c;每个更小的矩阵的边长是原矩阵的一半。其中左上角那一个矩阵的所有作弊者都将得到赦免&#xff0c;剩下3个小矩阵中&…

AC修炼计划(AtCoder Beginner Contest 334)A~G

传送门&#xff1a;UNIQUE VISION Programming Contest 2023 Christmas (AtCoder Beginner Contest 334) - AtCoder A题是最最基础的语法题就不再讲解。 B - Christmas Trees 该题虽然分低&#xff0c;但我觉得还是很不错的。 给你 l 和 r &#xff0c;设满足题意的数字是x则…

检查是否是类的对象实例

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 请你编写一个函数&#xff0c;检查给定的值是否是给定类或超类的实例。 可以传递给函数的数…