返回顶部
首页 > 资讯 > 精选 >怎么在JavaScript中实现休眠或等待
  • 568
分享到

怎么在JavaScript中实现休眠或等待

2023-06-14 20:06:28 568人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关怎么在javascript中实现休眠或等待,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多

这篇文章将为大家详细讲解有关怎么在javascript中实现休眠或等待,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

JavaScript有什么特点

1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,js可以在多种平台下运行,拥有着跨平台特性;3、js属于一种弱类型脚本语言,对使用的数据类型未做出严格的要求,能够进行类型转换,简单又容易上手;4、js语言安全性高,只能通过浏览器实现信息浏览或动态交互,从而有效地防止数据的丢失;5、基于对象的脚本语言,js不仅可以创建对象,也能使用现有的对象。

概述

JavaScript不具有 sleep()函数,该函数会导致代码在恢复执行之前等待指定的时间段。如果需要JavaScript等待,该怎么做呢?

假设您想将三则消息记录到Javascript控制台,每条消息之间要延迟一秒钟。JavaScript中没有 sleep() 方法,所以你可以尝试使用下一个最好的方法 setTimeout()。

setTimeout(1000)console.log(1)setTimeout(1000)console.log(2)setTimeout(1000)console.log(3)for (let i = 0; i <= 3; i++) {  setTimeout(1000)  console.log(`#${i}`)}

这段代码的结果完全没有延迟,就像 setTimeout() 不存在一样。

回顾文档,你会发现问题在于实际上第一个参数应该是函数调用,而不是延迟。毕竟,setTimeout() 实际上不是 sleep() 方法。

你重写代码以将回调函数作为第一个参数并将必需的延迟作为第二个参数:

setTimeout(() => console.log(1), 1000)setTimeout(() => console.log(2), 1000)setTimeout(() => console.log(3), 1000)for (let i = 0; i <= 3; i++) {  setTimeout(() => console.log(`#${i}`), 1000)}

这样一来,三个console.log的日志信息在经过1000ms(1秒)的单次延时后,会一起显示,而不是每次重复调用之间延时1秒的理想效果。

在讨论如何解决此问题之前,让我们更详细地研究一下 setTimeout() 函数。

检查setTimeout ()

你可能已经注意到上面第二个代码片段中使用了箭头函数。这些是必需的,因为你需要将匿名回调函数传递给 setTimeout(),该函数将在超时后运行要执行的代码。

在匿名函数中,你可以指定在超时时间后执行的任意代码:

// 使用箭头语法的匿名回调函数。setTimeout(() => console.log("你好!"), 1000)// 这等同于使用function关键字setTimeout(function() { console.log("你好!") }, 1000)

理论上,你可以只传递函数作为第一个参数,回调函数的参数作为剩余的参数,但对我来说,这似乎从来没有正确的工作:

// 应该能用,但不能用setTimeout(console.log, 1000, "你好")

人们使用字符串解决此问题,但是不建议这样做。从字符串执行JavaScript具有安全隐患,因为任何不当行为者都可以运行作为字符串注入的任意代码。

// 应该没用,但确实有用setTimeout(`console.log("你好")`, 1000)

那么,为什么在我们的第一组代码示例中 setTimeout() 失败?好像我们在正确使用它,每次都重复了1000ms的延迟。

原因是 setTimeout() 作为同步代码执行,并且对 setTimeout() 的多次调用均同时运行。每次调用 setTimeout() 都会创建异步代码,该代码将在给定延迟后稍后执行。由于代码段中的每个延迟都是相同的(1000毫秒),因此所有排队的代码将在1秒钟的单个延迟后同时运行。

如前所述,setTimeout() 实际上不是 sleep() 函数,取而代之的是,它只是将异步代码排入队列以供以后执行。幸运的是,可以使用 setTimeout() 在JavaScript中创建自己的 sleep() 函数。

如何编写sleep函数

通过Promises,async 和 await 的功能,您可以编写一个 sleep() 函数,该函数将按预期运行。

但是,你只能从 async 函数中调用此自定义 sleep() 函数,并且需要将其与 await 关键字一起使用。

这段代码演示了如何编写一个 sleep() 函数:

const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))const repeatedGreetings = async () => {  await sleep(1000)  console.log(1)  await sleep(1000)  console.log(2)  await sleep(1000)  console.log(3)}repeatedGreetings()

此JavaScript sleep() 函数的功能与您预期的完全一样,因为 await 导致代码的同步执行暂停,直到Promise被解决为止。

一个简单的选择

另外,你可以在第一次调用 setTimeout() 时指定增加的超时时间。

以下代码等效于上一个示例:

setTimeout(() => console.log(1), 1000)setTimeout(() => console.log(2), 2000)setTimeout(() => console.log(3), 3000)

使用增加超时是可行的,因为代码是同时执行的,所以指定的回调函数将在同步代码执行的1、2和3秒后执行。

它会循环运行吗?

如你所料,以上两种暂停JavaScript执行的选项都可以在循环中正常工作。让我们看两个简单的例子。

这是使用自定义 sleep() 函数的代码段:

const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))async function repeatGreetingsLoop() {  for (let i = 0; i <= 5; i++) {      await sleep(1000)    console.log(`Hello #${i}`)    }}repeatGreetingsLoop()

这是一个简单的使用增加超时的代码片段:

for (let i = 0; i <= 5; i++) {  setTimeout(() => console.log(`Hello #${i}`), 1000 * i)}

关于怎么在JavaScript中实现休眠或等待就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 怎么在JavaScript中实现休眠或等待

本文链接: https://lsjlt.com/news/275124.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么在JavaScript中实现休眠或等待
    这篇文章将为大家详细讲解有关怎么在JavaScript中实现休眠或等待,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多...
    99+
    2023-06-14
  • 如何使JavaScript休眠或等待
    目录概述检查setTimeout ()如何编写sleep函数一个简单的选择它会循环运行吗?总结概述 JavaScript不具有 sleep()函数,该函数会导致代码在恢复执行之前等待...
    99+
    2024-04-02
  • JavaScript中怎么利用sleep函数实现休眠或等待功能
    JavaScript中怎么利用sleep函数实现休眠或等待功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Ja使JavaSc...
    99+
    2024-04-02
  • 怎么在Javascript中实现异步等待
    本篇文章给大家分享的是有关怎么在Javascript中实现异步等待,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。async/await 是javascript中的一种模式,可使...
    99+
    2023-06-15
  • android休眠唤醒机制怎么实现
    Android的休眠和唤醒机制是通过系统级的PowerManager来实现的。下面是一个简单的示例代码,演示如何使用PowerMan...
    99+
    2023-10-20
    android
  • 计算机从睡眠或休眠状态中恢复时出现0x0000000a怎么解决
    当计算机从睡眠或休眠状态中恢复时出现0x0000000a错误代码,通常表示出现了一个系统内核错误。该错误代码通常与驱动程序...
    99+
    2023-09-12
    计算机
  • FutureTask怎么实现最大等待时间
    这篇文章主要介绍了FutureTask怎么实现最大等待时间的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇FutureTask怎么实现最大等待时间文章都会有所收获,下面我们一起来看看吧。预备知识Java 线程挂起...
    99+
    2023-07-05
  • java中的线程怎么实现等待与通知
    这篇文章给大家介绍java中的线程怎么实现等待与通知,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。关于等待/通知,要记住的关键点是:必须从同步环境内调用wait()、notify()、notifyAll()方法。线程不...
    99+
    2023-05-31
    java 线程 ava
  • win7怎么使用休眠功能具体实现步骤
      1、默认情况下,win7的关机菜单中只有睡眠,而并没有休眠这个选项   2、点击上图红框整那个的控制面板,将下图中的查看方式改为大图标,然后点电源选项   4、选择更改搞基电源设置   5、将睡眠中的允许混...
    99+
    2023-05-29
    win7 休眠 功能 步骤
  • css3缓冲和等待效果怎么实现
    这篇文章主要介绍“css3缓冲和等待效果怎么实现”,在日常操作中,相信很多人在css3缓冲和等待效果怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css3缓冲和等待效...
    99+
    2024-04-02
  • JavaScript 中怎么实现等分数组
    这篇文章将为大家详细讲解有关 JavaScript 中怎么实现等分数组,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 将数组分为两个相等的部分我们可以分...
    99+
    2024-04-02
  • 怎么在golang中利用Sync.WaitGroup解决等待问题
    怎么在golang中利用Sync.WaitGroup解决等待问题?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。golang适合做什么golang可以做服务器端开...
    99+
    2023-06-14
  • Redis怎么实现分布式锁和等待序列
    这篇文章主要介绍了Redis怎么实现分布式锁和等待序列,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在集群下,经常会因为同时处理发生资源争抢...
    99+
    2024-04-02
  • 如何在Redis中实现分布式锁的阻塞等待机制
    在Redis中实现分布式锁的阻塞等待机制可以使用Redis的BLPOP命令和SETNX命令结合实现。下面是一种基本的实现方式: 使...
    99+
    2024-04-09
    Redis
  • 怎么在css中实现等高布局
    这期内容当中小编将会给大家带来有关怎么在css中实现等高布局,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。使用table-cell实现(兼容IE8)<style>  &nb...
    99+
    2023-06-08
  • 怎么在JavaScript中实现new
    这期内容当中小编将会给大家带来有关怎么在JavaScript中实现new,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。创建一个空对象,将它的引用赋给 this,继承函数的原型;通过 this 将属性和方法...
    99+
    2023-06-15
  • Node.js中怎么实现线程睡眠
    Node.js中怎么实现线程睡眠,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一:糟糕的 “循环空转”下面这段代码是糟糕的,Node.js...
    99+
    2024-04-02
  • 怎么在javascript中使用相等运算符
    这篇文章给大家介绍怎么在javascript中使用相等运算符,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、相等运算符比较不严格。如果两个操作数量不是同一种类型,那么相等运算符就试着进行一些类型的转换,然后进行比较。...
    99+
    2023-06-15
  • 怎么在JavaScript中实现深拷贝
    怎么在JavaScript中实现深拷贝?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,...
    99+
    2023-06-14
  • 怎么用vbscript实现修改屏幕保护的等待时间长度
    本篇内容主要讲解“怎么用vbscript实现修改屏幕保护的等待时间长度”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用vbscript实现修改屏幕保护的等待时间长度”吧!问: 嗨,Scrip...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作