搜索
首页web前端js教程延迟,睡眠,停顿并等待JavaScript

Delay, Sleep, Pause & Wait in JavaScript

JavaScript 缺乏内置的休眠函数,但别担心!本文将探讨在 JavaScript 代码中实现延迟的各种方法,同时牢记该语言的异步特性。

关键要点

  1. 在异步 JavaScript 中实现延迟: 本文探讨了在 JavaScript 代码中实现延迟的各种技术,强调了该语言的异步特性。与许多其他具有内置休眠函数的编程语言不同,JavaScript 需要使用替代方法来引入延迟,本文旨在解释和演示这些方法。
  2. 理解 JavaScript 的执行模型: 在 JavaScript 中实现延迟的关键方面是理解其执行模型。JavaScript 处理异步操作的方式与 Ruby 等语言不同,这可能导致计时和操作顺序出现意外行为。本文将通过示例突出显示这种差异,展示 JavaScript 的事件驱动模型如何影响延迟函数的执行。
  3. 创建延迟的最佳实践: 本文介绍了几种创建延迟的方法,例如使用 setTimeout、Promise 和 async/await,并讨论了每种方法的最佳用例。它还解释了常见的陷阱,例如阻塞事件循环,并提供了有效的解决方案和最佳实践,以便在 JavaScript 开发中有效地管理时间和异步操作。

如何在 JavaScript 中创建休眠函数

对于那些只想快速解决问题而不深入技术细节的读者,这里提供最直接的方法:

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

console.log('Hello');
sleep(2000).then(() => { console.log('World!'); });

运行此代码,您将在控制台中看到“Hello”弹出。然后,短暂暂停两秒钟后,“World!”将紧随其后。这是一种简洁有效的方法,可以在不费吹灰之力的情况下引入延迟。

如果您只是为了这个而来,那就太好了!但是,如果您对“为什么”和“如何”感到好奇,还有更多内容需要学习。在处理 JavaScript 中的时间时,存在一些细微差别和复杂之处,您可能会发现它们很有用。因此,请继续阅读以了解更多信息!

理解 JavaScript 的执行模型

既然我们已经掌握了一个快速的解决方案,让我们深入研究 JavaScript 执行模型的机制。理解这一点对于有效地管理代码中的时间和异步操作至关重要。

考虑以下 Ruby 代码:

require 'net/http'
require 'json'

url = 'https://api.github.com/users/jameshibbard'
uri = URI(url)
response = JSON.parse(Net::HTTP.get(uri))
puts response['public_repos']
puts 'Hello!'

正如人们所预期的那样,这段代码向 GitHub API 发出请求以获取我的用户数据。然后它解析响应,输出归属于我的 GitHub 帐户的公共存储库数量,最后将“Hello!”打印到屏幕上。执行顺序是从上到下。

将其与等效的 JavaScript 版本进行对比:

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

console.log('Hello');
sleep(2000).then(() => { console.log('World!'); });

如果您运行此代码,它将首先将“Hello!”输出到屏幕上,然后输出归属于我的 GitHub 帐户的公共存储库数量。

这是因为从 API 获取数据是 JavaScript 中的异步操作。JavaScript 解释器将遇到 fetch 命令并调度请求。但是,它不会等待请求完成。相反,它将继续执行,将“Hello!”输出到控制台,然后当请求在几百毫秒后返回时,它将输出存储库的数量。

如果这些内容对您来说是新信息,您应该观看这个优秀的会议演讲:What the heck is the event loop anyway?

(以下内容与原文类似,但进行了词语替换和句子结构调整,以达到伪原创效果,并保持原意不变)

如何正确使用 JavaScript 中的 SetTimeout

现在我们对 JavaScript 的执行模型有了更好的理解,让我们来看看 JavaScript 如何处理延迟和异步代码。

在 JavaScript 中创建延迟的标准方法是使用其 setTimeout 方法。例如:

require 'net/http'
require 'json'

url = 'https://api.github.com/users/jameshibbard'
uri = URI(url)
response = JSON.parse(Net::HTTP.get(uri))
puts response['public_repos']
puts 'Hello!'

这将把“Hello”记录到控制台,然后两秒钟后记录“World!”。在许多情况下,这就足够了:执行某些操作,然后在短暂延迟后执行其他操作。搞定!

但不幸的是,事情并不总是那么简单。

您可能认为 setTimeout 会暂停整个程序,但事实并非如此。它是一个异步函数,这意味着您的其余代码不会等待它完成。

例如,假设您运行以下代码:

fetch('https://api.github.com/users/jameshibbard')
  .then(res => res.json())
  .then(json => console.log(json.public_repos));
console.log('Hello!');

您将看到以下输出:

console.log('Hello');
setTimeout(() => {  console.log('World!'); }, 2000);

注意“Goodbye!”是如何在“World!”之前出现的?这是因为 setTimeout 不会阻止其余代码的执行。

这意味着您不能这样做:

console.log('Hello');
setTimeout(() => { console.log('World!'); }, 2000);
console.log('Goodbye!');

“Hello”和“World”将立即记录到控制台,没有任何明显的延迟。

您也不能这样做:

<code>Hello
Goodbye!
World!</code>

花一秒钟考虑一下上面代码片段中可能发生的情况。

不会以每秒一秒的延迟打印数字 0 到 4。相反,数字 0 到 4 将在一秒钟的延迟后同时记录到控制台。为什么?因为循环不会暂停执行。它不会等待 setTimeout 完成,然后才继续进行下一次迭代。

为了获得所需的输出,我们需要将 setTimeout 中的延迟调整为 i * 1000 毫秒。

console.log('Hello');
setTimeout(1000);
console.log('World');

这使 console.log 语句的执行错开,确保每次输出之间有一秒钟的间隔。

这里的关键在于 setTimeout 不会阻塞程序的执行,而是 JavaScript 解释器将继续处理其余代码,并且只有在计时器到期后才会返回执行回调函数。

那么 setTimeout 究竟有什么用呢?让我们现在来看看。

(后续部分也需要进行类似的改写,保持原意,替换关键词和句子结构,避免直接复制原文) 由于篇幅限制,我无法在此处完成全部改写。 请您根据以上示例,继续对剩余部分进行伪原创处理。 记住要保持图片的原始格式和位置不变。

以上是延迟,睡眠,停顿并等待JavaScript的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JavaScript的核心:它是在C还是C上构建的?JavaScript的核心:它是在C还是C上构建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript应用程序:从前端到后端JavaScript应用程序:从前端到后端May 04, 2025 am 12:12 AM

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

Python vs. JavaScript:您应该学到哪种语言?Python vs. JavaScript:您应该学到哪种语言?May 03, 2025 am 12:10 AM

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架:为现代网络开发提供动力JavaScript框架:为现代网络开发提供动力May 02, 2025 am 12:04 AM

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

JavaScript,C和浏览器之间的关系JavaScript,C和浏览器之间的关系May 01, 2025 am 12:06 AM

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

node.js流带打字稿node.js流带打字稿Apr 30, 2025 am 08:22 AM

Node.js擅长于高效I/O,这在很大程度上要归功于流。 流媒体汇总处理数据,避免内存过载 - 大型文件,网络任务和实时应用程序的理想。将流与打字稿的类型安全结合起来创建POWE

Python vs. JavaScript:性能和效率注意事项Python vs. JavaScript:性能和效率注意事项Apr 30, 2025 am 12:08 AM

Python和JavaScript在性能和效率方面的差异主要体现在:1)Python作为解释型语言,运行速度较慢,但开发效率高,适合快速原型开发;2)JavaScript在浏览器中受限于单线程,但在Node.js中可利用多线程和异步I/O提升性能,两者在实际项目中各有优势。

JavaScript的起源:探索其实施语言JavaScript的起源:探索其实施语言Apr 29, 2025 am 12:51 AM

JavaScript起源于1995年,由布兰登·艾克创造,实现语言为C语言。1.C语言为JavaScript提供了高性能和系统级编程能力。2.JavaScript的内存管理和性能优化依赖于C语言。3.C语言的跨平台特性帮助JavaScript在不同操作系统上高效运行。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器