返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何使JavaScript休眠或等待
  • 424
分享到

如何使JavaScript休眠或等待

2024-04-02 19:04:59 424人浏览 安东尼
摘要

目录概述检查setTimeout ()如何编写sleep函数一个简单的选择它会循环运行吗?总结概述 javascript不具有 sleep()函数,该函数会导致代码在恢复执行之前等待

概述

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

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

不幸的是,setTimeout() 不能像你期望的那样正常工作,这取决于你如何使用它。你可能已经在JavaScript循环中的某个点上试过了,看到 setTimeout() 似乎根本不起作用。

问题的产生是由于将 setTimeout() 误解为 sleep() 函数,而实际上它是按照自己的一套规则工作的。

浏览一下 setTimeout() 的文档,它似乎需要一个 "延迟 "参数,以毫秒为单位。

回到原始问题,您尝试调用 setTimeout(1000) 在两次调用 console.log() 函数之间等待1秒。

不幸的是 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可能没有 sleep() 或 wait() 函数,但是使用内置的 setTimeout() 函数很容易创建一个JavaScript,只要你谨慎使用它即可。

就其本身而言,setTimeout() 不能用作 sleep() 函数,但是你可以使用 async 和 await 创建自定义JavaScript sleep() 函数。

采用不同的方法,可以将交错的(增加的)超时传递给 setTimeout() 来模拟 sleep() 函数。之所以可行,是因为所有对setTimeout() 的调用都是同步执行的,就像JavaScript通常一样。

希望这可以帮助你在代码中引入一些延迟——仅使用原始JavaScript,而无需外部库或框架

以上就是如何使JavaScript休眠或等待的详细内容,更多关于JavaScript休眠或等待的资料请关注编程网其它相关文章!

--结束END--

本文标题: 如何使JavaScript休眠或等待

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

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

猜你喜欢
  • 如何使JavaScript休眠或等待
    目录概述检查setTimeout ()如何编写sleep函数一个简单的选择它会循环运行吗?总结概述 JavaScript不具有 sleep()函数,该函数会导致代码在恢复执行之前等待...
    99+
    2024-04-02
  • 怎么在JavaScript中实现休眠或等待
    这篇文章将为大家详细讲解有关怎么在JavaScript中实现休眠或等待,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多...
    99+
    2023-06-14
  • JavaScript中怎么利用sleep函数实现休眠或等待功能
    JavaScript中怎么利用sleep函数实现休眠或等待功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Ja使JavaSc...
    99+
    2024-04-02
  • 关闭电脑,或使其进入睡眠或休眠状态
    关闭电脑通常是指完全关闭电脑的所有功能。要关闭电脑,您可以按下电源按钮并选择关闭选项。具体的操作取决于您使用的操作系统。进入睡眠状态...
    99+
    2023-09-13
    电脑
  • C语言的sleep、usleep、nanosleep等休眠函数如何使用
    这篇文章主要讲解了“C语言的sleep、usleep、nanosleep等休眠函数如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言的sleep、usleep、nanosleep等...
    99+
    2023-07-05
  • ubuntu如何禁止休眠
    ubuntu不进入休眠模式的方法:打开ubuntu系统。点击“System”。再选择“Preferences”。最后选择“Screensaver”选项。在“Screensaver”对话框中将下面两个单选框的去除掉即可。...
    99+
    2024-04-02
  • win11如何禁止休眠
    今天小编给大家分享一下win11如何禁止休眠的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。方法一: 首先右键开始菜单,打开“...
    99+
    2023-07-02
  • win10休眠如何唤醒
    这篇文章主要介绍“win10休眠如何唤醒”,在日常操作中,相信很多人在win10休眠如何唤醒问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win10休眠如何唤醒”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-30
  • win10如何设置休眠
    这篇文章主要介绍了win10如何设置休眠的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win10如何设置休眠文章都会有所收获,下面我们一起来看看吧。点击【小娜】搜索【控制面板】,点击【控制面板】(桌面应用)。在...
    99+
    2023-07-01
  • win7休眠如何开启
      win7系统自带有休眠功能,很多用户也喜欢用此功能,因为能够节省电能,提高工作效率,受到很多用户的喜爱,但是还有一部分的用户不知道win7休眠怎么开启,接下来小编就把win7休眠的开启方法带给大家。  win7休眠:  1.首先我们可以...
    99+
    2023-07-15
  • win8为什么没有休眠选项如何开启休眠
      Windows 8 默认情况下是无法直接选择休眠选项,需要手动修改。   默认情况下选择“电源”和快捷键“Alt+F4 ”菜单中不会有休眠选项,如图  ...
    99+
    2022-06-04
    选项
  • linux如何设置不休眠
    要设置Linux不休眠,可以使用以下方法:1. 命令行方式:打开终端,输入以下命令来禁用休眠功能:```sudo systemctl...
    99+
    2023-09-28
    linux
  • centos7休眠后如何进入
    要进入CentOS7休眠后的模式,您可以按照以下步骤操作:1. 首先,确保您的计算机配置支持休眠功能。通常,CentOS7默认启用了...
    99+
    2023-09-16
    centos7
  • win10如何设置不休眠
    要设置Windows 10不休眠,可以按照以下步骤操作:1. 打开“控制面板”,可以在“开始”菜单中搜索并打开。2. 在“控制面板”...
    99+
    2023-09-08
    win10
  • C语言的sleep、usleep、nanosleep等休眠函数的使用
    目录引子(一) sleep 函数sleep 函数的用法sleep 函数的返回值sleep 函数的参数(二) usleep 函数usleep 函数的用法usleep 函数的返回值usl...
    99+
    2023-03-09
    C语言 sleep usleep nanosleep
  • ubuntu如何修改休眠时间
    ubuntu修改休眠时间的方法:1.打开ubuntu系统;2.点击桌面设置图标并选择“System Settings”打开设置;3.选择“Brightness & Lock”程序;4.在“Lock screen after”选项后面修改并设...
    99+
    2024-04-02
  • 如何设置Ubuntu休眠时间
    设置Ubuntu休眠时间的方法:打开系统设置中的“亮度和锁屏”。在弹出的对话框中“在此时间内无操作则关闭屏幕(T)”后设置锁屏休眠时间即可。相关操作:使用【Ctrl + Alt + L】快捷键即可立即锁屏。...
    99+
    2024-04-02
  • python如何设置休眠时间
    这篇文章给大家分享的是有关python如何设置休眠时间的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。休眠时间import timefor i in companies:&n...
    99+
    2023-06-27
  • win10如何关闭自动休眠
    这篇文章主要讲解了“win10如何关闭自动休眠”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win10如何关闭自动休眠”吧!win10关闭自动休眠的方法首先右键桌面空白处,选择“个性化” 点...
    99+
    2023-07-01
  • win11没有休眠如何解决
    这篇文章主要介绍“win11没有休眠如何解决”,在日常操作中,相信很多人在win11没有休眠如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win11没有休眠如何解决”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作