JavaScript 中的异步编程

javascript 中的异步编程

JavaScript 作为单线程语言,一次只能执行一个任务,这可能导致复杂任务执行缓慢。为解决此问题,JavaScript 提供了异步编程机制,允许脚本在等待异步操作完成的同时继续执行其他任务。本文将介绍 JavaScript 异步编程的基础知识,并讲解如何使用回调函数、Promise 和 Async/Await 实现异步操作。

回调函数 (Callbacks)

回调函数作为参数传递给另一个函数,并在主函数执行完毕后执行。在异步编程中,回调函数用于在异步任务完成后执行后续操作。

示例:

立即学习“Java免费学习笔记(深入)”;

function slowTask(callback) {  setTimeout(() => {    console.log("慢任务完成");    callback();  }, 1000);}function runProgram() {  console.log("程序开始");  slowTask(() => {    console.log("回调函数执行");  });  console.log("程序结束");}runProgram();

这段代码中,slowTask 函数接收一个回调函数作为参数。setTimeout 模拟一个耗时 1 秒的任务。runProgram 函数调用 slowTask 并传入回调函数。输出结果如下:

程序开始程序结束慢任务完成回调函数执行

Promise

Promise 是 JavaScript 中处理异步操作的一种更现代的方法。Promise 代表异步操作的结果,其状态可以是三种之一:pending(进行中)、fulfilled(已完成)或 rejected(已拒绝)。可以使用 thencatch 方法处理 Promise 的结果。

示例:

立即学习“Java免费学习笔记(深入)”;

const slowTask = new Promise((resolve, reject) => {  setTimeout(() => {    resolve("慢任务完成");  }, 1000);});function runProgram() {  console.log("程序开始");  slowTask    .then((result) => {      console.log(result);    })    .catch((error) => {      console.error(error);    });  console.log("程序结束");}runProgram();

此示例中,slowTask 是一个 Promise,一秒后变为 fulfilled 状态,结果为 “慢任务完成”。runProgram 函数使用 then 方法处理 Promise 的结果。输出结果如下:

程序开始程序结束慢任务完成

Async/Await

Async/Await 是 JavaScript 中处理异步操作的最新、最易读的方式。它允许开发者编写看起来像同步代码的异步代码,提高代码的可读性和可维护性。async 关键字用于声明异步函数,await 关键字用于等待 Promise 解析。

示例:

立即学习“Java免费学习笔记(深入)”;

async function fetchData() {  const response = await fetch("https://api.example.com/data");  const data = await response.json();  console.log(data);}fetchData();

此示例中,fetchData 函数使用 async 关键字声明为异步函数。await 关键字用于等待 fetchresponse.json() 操作完成。

需要注意的是,await 关键字只能在 async 函数中使用。异步函数内部的代码异步执行,但函数外部的代码仍然同步执行。

总而言之,JavaScript 的异步编程允许脚本在等待异步任务完成的同时继续执行其他任务。回调函数、Promise 和 Async/Await 是三种实现异步编程的方式,其中 Async/Await 是现代 JavaScript 编程中推荐的方式,因为它更易于阅读和维护。  掌握 JavaScript 异步编程对于构建高效、响应迅速的应用程序至关重要。

以上就是JavaScript 中的异步编程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1500217.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 22:23:54
下一篇 2025年12月19日 22:24:11

相关推荐

  • 你从来不知道存在的令人惊叹的 Github 存储库

    GitHub:程序员的秘密花园 学习编程容易,编写高质量代码却难。GitHub是程序员的知识宝库,汇聚了无数优秀代码,助你提升编程技能。探索GitHub,学习简洁高效的代码风格,提升编程水平。 精选GitHub优质项目推荐: notwaldorf/表情符号翻译: 告别枯燥文本,用表情符号表达你的想法…

    2025年12月19日
    000
  • 使用 JS 管理国家和货币

    处理全球化的项目时,管理国家和货币列表及其格式化方式可能很复杂。 country-currency-utils npm 包应运而生,它以 TypeScript 编写,旨在简化这个过程,无论是在前端还是后端。该包避免在代码库中直接包含庞大的国家/地区和货币数据,而是通过 CDN 获取这些数据,从而保持…

    2025年12月19日
    000
  • 使用 Nodejs 安排删除过程的一种方法

    使用 Node.js 的 node-cron 包实现定时删除 本文介绍如何利用 Node.js 的 node-cron 包,实现对数据库用户数据的定时删除功能。 1. 安装 node-cron 包 首先,使用 npm 安装 node-cron 包: npm install node-cron 2. …

    2025年12月19日
    000
  • 使用reactify-django CLI将React无缝集成到Django中

    将React集成到Django项目中,能显著提升开发效率,充分发挥React动态客户端功能和Django服务器端渲染及安全性的优势。Reactify-django CLI工具简化了这一集成过程,让您可以轻松构建兼具强大后端和高度交互式UI的应用。此外,它还支持TypeScript和Tailwind …

    2025年12月19日
    000
  • 探索 Mina 协议:zk 应用程序的实际用例

    zkapps(零知识应用)是由零知识证明支持的 mina 协议智能合约,特别是 zk-snarks [零知识简洁非交互式知识论证]。zkapps 取代了 snapps [智能非交互式知识论证]应用]。 zkapp 智能合约是使用 o1js(typescript 库)编写的。 zkapps 在用户的 …

    2025年12月19日 好文分享
    000
  • 在 JavaScript 中使用递归逻辑高效提取嵌套 URL 参数

    问题描述: 从嵌套URL中提取特定参数值。例如,从URL /main?from=/details?from=/more?id=456 中提取参数 id 的值。 方法一:递归函数 该方法使用递归函数 getnestedsearchparamvalue 来逐层解析嵌套的 URL。 函数接收 URL 片段…

    2025年12月19日
    000
  • 将 Playwright 与 Jenkins 集成的最佳实践是什么

    将 Playwright 集成到 Jenkins CI/CD 流程中,可显著提升自动化测试效率。本文分享一些最佳实践,助您顺利完成集成。 一、Docker 保持环境一致性 使用 Docker 容器运行 Jenkins 代理,确保测试环境一致。Playwright 提供官方 Docker 镜像,包含所…

    2025年12月19日
    000
  • js数据库怎样进行数据备份

    本文介绍几种JavaScript数据库备份方法,适用于浏览器环境。 方法一:利用IndexedDB的备份功能 IndexedDB是浏览器端存储大量结构化数据的API,提供indexeddb.backup()方法进行数据库备份。以下代码示例演示了如何备份名为mydatabase的数据库: async …

    2025年12月19日
    000
  • js爬虫怎样控制爬取速度

    JavaScript爬虫速度控制的关键在于合理运用setTimeout函数或Promise.then()方法,避免对目标服务器造成过大压力。 setTimeout允许您在指定毫秒数后执行函数,从而实现延迟。 以下示例展示了如何使用setTimeout控制爬虫速度: const axios = req…

    2025年12月19日
    000
  • 交互式语音应答

    人工智能赋能IVR:语音交互新纪元 交互式语音应答系统(IVR)正经历着由人工智能(AI)驱动的深刻变革。传统IVR系统因其僵化的菜单和糟糕的用户体验而饱受诟病,而如今,AI驱动的智能语音助手正逐步取代它们,为用户带来更流畅、更个性化、更高效的交互体验。 AI驱动的IVR系统利用自然语言处理(NLP…

    2025年12月19日
    000
  • 设计令人愉快的维护中页面 HTML 和 CSS

    网站维护期间,一个设计精良的“维护中”页面至关重要,它能有效地向用户传达网站暂时停运的信息,并确保透明度和用户参与度。本文将深入探讨如何使用HTML和CSS设计这样的页面,使其兼具视觉吸引力、响应速度和功能性。 为什么“维护中”页面如此重要? 清晰的沟通 网站停运可能由服务器升级、内容更新或安全补丁…

    2025年12月19日
    000
  • 让 EditorJS 在 Svelte(kit) SSR 中工作

    本文简述了在SvelteKit服务器端渲染(SSR)环境中使用Editor.js的解决方案。由于Editor.js本身不支持SSR,直接使用会导致错误。 您可能会遇到类似如下的错误信息: [vite] error when evaluating ssr module /src/routes/+pag…

    2025年12月19日
    000
  • js数据库怎样保证数据一致性

    JavaScript数据库数据一致性策略: 为了确保JavaScript应用中数据库数据的完整性和一致性,我们可以运用多种策略,主要包括事务处理、锁机制和乐观锁。 1. 事务处理 (Transactions): 事务是维护数据一致性的基石。它保证一组数据库操作要么全部成功,要么全部失败,从而避免部分…

    2025年12月19日
    000
  • Conditional Rendering: Best Practices and Pitfalls to Avoid

    条件渲染:高效灵活地控制UI显示 条件渲染是根据特定条件动态显示不同内容或UI元素的关键技术,在构建动态交互式应用中不可或缺。然而,不当的条件渲染实现可能导致代码难以维护、错误频发或效率低下。本文将介绍条件渲染的最佳实践和常见陷阱,助您编写更清晰、高效的代码。 条件渲染最佳实践 简单条件?用三元运算…

    2025年12月19日
    000
  • 后端开发学Nodejs和Expressjs就够了吗?

    Node.js和Express.js是开启后端开发之旅的理想起点,但要成为一名资深的后端工程师,还需要掌握更多技能和工具。本文将为您绘制一份技能提升路线图: 核心技能 JavaScript精进: 深入理解JavaScript,熟练运用ES6特性,如Promise、async/await和解构赋值。异…

    2025年12月19日
    000
  • 掌握 Nodejs、Expressjs 和基本后端开发技能的第三个学习计划

    这份全面的双月学习计划将帮助您掌握 Node.js、Express.js 和核心后端开发技能。计划假设您每周工作五天,每天学习 3-4 小时。遵循此计划,您将建立扎实的技能基础,并逐步提升您的专业能力。 第一阶段:Node.js 基础 (第 1 周) 学习目标: 理解 Node.js 和 JavaS…

    2025年12月19日
    000
  • js爬虫怎样进行异常处理

    JavaScript爬虫开发中,异常处理至关重要。 网络请求和HTML解析过程容易出错,有效的异常处理能确保爬虫程序的稳定运行。 try…catch语句是JavaScript中处理异常的主要方法。 以下示例演示如何使用try…catch结合axios (HTTP请求)和cheerio (HT…

    好文分享 2025年12月19日
    000
  • js数据库如何进行数据恢复

    JavaScript本身并非数据库,但可用于操作数据库。本文演示如何结合Node.js和Sequelize库实现JavaScript数据库数据恢复。 前提条件:已安装Node.js 以下步骤将指导您使用Sequelize操作数据库,并进行数据恢复: 新建Node.js项目: mkdir my-db-…

    2025年12月19日
    000
  • js数据库如何进行数据迁移

    JavaScript数据库迁移是一个多步骤过程,需要谨慎操作以确保数据完整性。以下步骤概述了如何执行此操作: 1. 数据库选择与架构设计: 首先,选择适合项目需求的数据库(例如MySQL、PostgreSQL、MongoDB或SQLite)。 然后,仔细设计数据库架构,包括数据类型、关系和约束。 对…

    2025年12月19日
    000
  • js数据库怎样进行数据加密

    JavaScript数据库数据加密解密方法详解 本文介绍在javascript中如何安全地加密和解密数据库数据,主要涵盖两种方法:使用原生subtlecrypto api和第三方库crypto-js。 选择哪种方法取决于项目需求和安全性考量。 方法一:使用subtleCrypto API (推荐) …

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信