当前位置: 首页 > article >正文

JavaScript基础课程十八、异步编程高级(async/await + 模块化)

本课聚焦前端异步编程终极方案async/await与ES6模块化是异步编程的收尾与进阶内容。async/await依托Promise用同步写法实现异步逻辑彻底解决回调嵌套和链式调用繁琐问题是当前项目主流异步写法。模块化则解决代码混乱、全局污染、复用性差的痛点实现代码规范化拆分。课程通过基础异步、并行执行、模块化拆分三类案例串联起完整的高级异步开发流程帮助建立工程化思维。掌握本课内容既能写出简洁健壮的异步代码又能搭建规范的项目结构适配主流前端开发规范也是面试高频考点为后续框架学习打下坚实底层基础。一、课程学习目的理解async/await的底层依托掌握其作为Promise语法糖的核心特性彻底告别回调嵌套。熟练使用async/await编写同步风格的异步代码实现异步任务的串行、并行执行。掌握try/catch捕获async/await异常的规范写法保障异步逻辑稳定性。理解JS模块化的意义学会ES6模块化export/import的基础用法实现代码拆分与复用。结合async/await与模块化搭建规范的异步项目结构为工程化开发奠定基础。二、核心知识点讲解1. async/await 基础认知async/await是ES7推出的Promise语法糖基于Promise实现让异步代码写法完全同步化可读性和可维护性远超原生Promise链式调用。核心规则async修饰函数标记该函数为异步函数内部可使用await函数默认返回Promise对象。await只能在async函数内使用暂停代码执行等待右侧Promise状态变更后再继续。2. async/await 执行与异常处理await会等待Promise返回结果成功则直接获取resolve值失败则抛出异常必须配合try/catch捕获错误避免程序崩溃。3. ES6 模块化基础模块化用于拆分代码、避免全局污染、实现功能复用是前端工程化的基础。核心语法export导出模块内的变量、函数、类分为默认导出export default和按需导出。import导入其他模块的内容配合script typemodule使用。4. async/await 结合模块化将异步请求、工具函数封装为独立模块通过import引入在async函数内调用await执行实现逻辑解耦、代码复用。三、示例程序示例1async/await 基础用法// 复用第15课Promise封装functiongetWordInfo(word){returnnewPromise((resolve,reject){setTimeout((){if(word)resolve({en:word,cn:中文释义});elsereject(单词不能为空);},1000);});}// async修饰异步函数asyncfunctionfetchWord(){// try/catch捕获异常try{// await等待Promise结果同步写法constres1awaitgetWordInfo(apple);console.log(第一个单词,res1);constres2awaitgetWordInfo(banana);console.log(第二个单词,res2);}catch(err){// 捕获await抛出的错误console.error(异步失败,err);}}// 调用异步函数fetchWord();示例2async/await 并行执行asyncfunctionfetchAllWord(){try{// Promise.all实现并行await等待全部结果constresultsawaitPromise.all([getWordInfo(apple),getWordInfo(banana),getWordInfo(orange)]);console.log(全部单词,results);}catch(err){console.error(加载失败,err);}}fetchAllWord();示例3ES6模块化拆分// wordModule.js 模块文件导出// 异步函数封装exportasyncfunctiongetWord(word){try{constresawaitfetch(/api/word?name${word});returnres.json();}catch(err){throwerr;}}// 默认导出exportdefault{getWord};// 主文件 index.js 导入import{getWord}from./wordModule.js;asyncfunctioninit(){constdataawaitgetWord(grape);console.log(data);}init();四、掌握技巧与方法await必须写在async函数内禁止在全局或普通函数中单独使用。所有await逻辑都要包裹try/catch规范捕获异步异常避免未处理错误。无依赖的异步任务用Promise.allawait并行执行提升加载效率。模块化拆分遵循单一职责异步逻辑、工具函数、业务逻辑分开封装。浏览器中使用ES6模块化script标签需添加typemodule属性。async函数返回的Promise可继续链式调用灵活适配复杂场景。五、课后作业基础作业用async/await改写第15课Promise链式调用代码实现串行获取单词。使用try/catch捕获async/await的异常测试失败场景。编写async函数通过awaitPromise.all并行加载3组数据。进阶作业将Promise异步函数拆分为独立模块用import导入并通过await调用。实现异步加载的加载状态、成功、失败三种页面反馈。在async函数内实现异步任务超时中断逻辑。实战作业搭建模块化异步单词查询页面拆分异步请求模块、渲染模块用async/await处理异步逻辑实现加载提示、错误兜底、数据展示全流程。上一课异步编程进阶Promise实战作业代码代码功能说明本实战代码围绕Promise核心知识点采用英语单词加载场景实现完整的异步处理流程。代码封装Promise异步函数模拟网络请求延迟获取单词数据支持单个单词查询、链式串行加载、多单词并行加载三大功能搭配页面加载状态、成功渲染、错误提示交互直观展示Promise三种状态流转、then/catch/finally用法以及Promise.all并行执行逻辑。页面配备功能按钮点击可分步演示各类异步场景全程贴合第15课核心考点对比回调函数优势为async/await学习做好铺垫。注意事项Promise状态一旦从pending变为fulfilled/rejected不可再次修改resolve/reject仅调用一次。必须添加catch捕获异常避免未处理的Promise错误导致页面逻辑中断。链式调用时then内部需返回新Promise才能实现异步串行执行。Promise.all中任一任务失败整体会进入catch需做好单个任务异常兜底。finally常用于关闭加载状态、清理定时器无论成功失败都会执行。调试时打开浏览器控制台观察Promise状态变化与执行时序加深理解。禁止在Promise执行器内编写同步阻塞代码保证异步特性。完整实战代码!DOCTYPEhtmlhtmllangzh-CNheadmetacharsetUTF-8title第15课 Promise实战 - 单词异步加载器/titlestyle.box{width:750px;margin:50px auto;padding:30px;border:1px solid #eee;border-radius:10px;font-family:Microsoft YaHei;box-shadow:0 0 12pxrgba(0,0,0,0.06);}.btn{padding:10px 20px;margin:10px 8px;background:#42b983;color:#fff;border:none;border-radius:6px;cursor:pointer;transition:0.3s;}.btn:hover{background:#359469;}.result{margin-top:25px;padding:20px;line-height:2;border-top:1px dashed #eee;min-height:180px;}.item{margin:8px 0;padding:10px;background:#f9f9f9;border-radius:5px;}.loading{color:#666;}.error{color:#f56c6c;}/style/headbodydivclassboxh2Promise单词异步加载器/h2buttonclassbtnonclickgetSingleWord()单个单词查询/buttonbuttonclassbtnonclickgetSeriesWord()串行链式加载/buttonbuttonclassbtnonclickgetAllWord()并行批量加载/buttonbuttonclassbtnonclickclearResult()清空结果/buttondivclassresultidresult/div/divscriptconstresDomdocument.getElementById(result);// 渲染函数functionrender(html,className){resDom.innerHTMLdiv classitem${className}${html}/div;}// 清空结果functionclearResult(){resDom.innerHTML;}// Promise封装异步获取单词functionfetchWord(word){returnnewPromise((resolve,reject){render(正在加载${word},loading);// 模拟网络延迟setTimeout((){if(wordtypeofwordstring){// 成功resolve({en:word,cn:对应中文释义,status:success});}else{// 失败reject(单词参数无效加载失败);}},1500);});}// 1. 单个单词查询functiongetSingleWord(){fetchWord(apple).then(res{render(成功${res.en}-${res.cn});}).catch(err{render(错误${err},error);}).finally((){render(单次查询任务结束);});}// 2. 链式串行加载functiongetSeriesWord(){fetchWord(apple).then(res{render(成功1${res.en}-${res.cn});returnfetchWord(banana);}).then(res{render(成功2${res.en}-${res.cn});returnfetchWord(orange);}).then(res{render(成功3${res.en}-${res.cn});}).catch(err{render(错误${err},error);});}// 3. 并行批量加载functiongetAllWord(){consttaskList[fetchWord(apple),fetchWord(banana),fetchWord(grape)];Promise.all(taskList).then(results{results.forEach((res,index){render(批量成功${index1}${res.en}-${res.cn});});}).catch(err{render(批量错误${err},error);});}/script/body/html作业验收标准所有功能按钮点击正常无控制台报错加载、成功、错误状态展示清晰。单个查询、串行链式、并行批量逻辑执行准确符合Promise执行规则。异常捕获到位错误提示友好finally收尾逻辑正常执行。代码规范、注释完整贴合第15课Promise核心知识点交互简洁直观。

相关文章:

JavaScript基础课程十八、异步编程高级(async/await + 模块化)

本课聚焦前端异步编程终极方案async/await与ES6模块化,是异步编程的收尾与进阶内容。async/await依托Promise,用同步写法实现异步逻辑,彻底解决回调嵌套和链式调用繁琐问题,是当前项目主流异步写法。模块化则解决代码混乱、全局污…...

【大模型RAG02】HyDE 精读

HyDE 精读笔记 Precise Zero-Shot Dense Retrieval without Relevance Labels 一、论文基本信息 论文标题:Precise Zero-Shot Dense Retrieval without Relevance Labels(无需相关标签的精准零样本密集检索) 作者:Luyu Gao, Xueguang Ma, Jimmy Lin, Jamie Callan(卡内基…...

AIGlasses OS Pro 实战:AIGC内容创作中的视觉元素合规性审核

AIGlasses OS Pro 实战:AIGC内容创作中的视觉元素合规性审核 最近和几个做AIGC平台的朋友聊天,他们都在头疼同一个问题:用户每天生成的海量图片和视频,怎么才能又快又准地筛出那些不合规的内容?人工审核团队已经三班倒…...

稳定性平台—版本接维

稳定性平台—版本接维...

DeepSeek-OCR-2部署案例:K8s集群中水平扩展OCR微服务实践

DeepSeek-OCR-2部署案例:K8s集群中水平扩展OCR微服务实践 1. 项目背景与价值 DeepSeek-OCR-2是DeepSeek团队推出的新一代OCR识别模型,采用创新的DeepEncoder V2技术,能够智能理解图像内容并动态重组识别区域,彻底改变了传统OCR从…...

50. 随机数排序

50. 随机数排序 题目描述 生成 N 个 1 到 500 的随机数,你需要删除掉其中重复的数字,即相同的数字只保留一个,把其余相同的数字去掉,然后再把这些数从小到大进行输出。 输入描述 第一行先输入随机整数的个数 N 。 接下来一行包含 …...

vue和nuxt的整合项目报错【Vue warn】: The client-side rendered virtual DOM tree is....并且页面的生命周期函数执行两次,彻底解决方案!

问题描述:当我在做一个查询课程详情的功能时候,想顺便在后台修改课程的浏览量,即让它加1,但发现每次刷新页面,数值竟然增加两次!于是我在这个页面的生命周期函数里面打印东西,发现每次打印的都是…...

如何用Java构建企业级电商聊天系统:MallChat架构深度解析

如何用Java构建企业级电商聊天系统:MallChat架构深度解析 【免费下载链接】MallChat mallchat的后端项目,是一个既能购物又能聊天的电商系统。以互联网企业级开发规范的要求来实现它,电商该有的购物车,订单,支付&#…...

轴承3d模型为什么 WL 迭代在 3 次后就收敛了

很好的问题!让我解释一下为什么 WL 迭代在 3 次后就收敛了。 WL (Weisfeiler-Lehman) 图核收敛原理 核心机制 WL 算法通过迭代细化节点标签来捕获图的结构信息: 迭代 0: 使用初始标签(这里是面类型:圆柱面、圆环面、平面&#xff…...

Windows查看快捷键占用情况

文章目录问题描述解决方案常用快捷键参考文献问题描述 IDE 使用快捷键没反应,却找不出来是哪个程序占用了快捷键(热键),通常是 QQ、网易云音乐等软件的问题。 解决方案 使用 OpenArk,根据文档描述,它可以…...

wl迭代以哪个节点为最后零件点进行计算呢,怎么实现图不变性的

好问题!让我详细解释 WL 迭代的计算机制和图不变性的实现原理。 已查看文件 face_graph_builder.cs 非常好的问题!让我详细解释 WL 迭代的计算机制和图不变性原理: 🔍 WL 迭代的核心机制 ❌ 没有"最后节点"的概念 WL 算…...

mysql数据库的4中隔离级别详解

众所周知MySQL从5.5.8开始,Innodb就是默认的存储引擎,Innodb最大的特点是:支持事务、支持行级锁。 既然支持事务,那么就会有处理并发事务带来的问题:更新丢失、脏读、不可重复读、幻读;相应的为了解决这四个…...

java8特性Stream 常见用法

最近在开发中看到同事使用stream 进行集合的数据转换List<object> ->List<String> List<object> --> Map<Long, object>&#xff0c;感觉十分简单方便&#xff0c;上网找了一下资料学习一下 Java 8 Stream | 菜鸟教程 记录一下我们常见用法 …...

647836

6378452...

Pixel Dimension Fissioner实操手册:实时HP状态与引擎负载可视化监控

Pixel Dimension Fissioner实操手册&#xff1a;实时HP状态与引擎负载可视化监控 1. 工具概览 Pixel Dimension Fissioner是一款基于MT5-Zero-Shot-Augment核心引擎构建的文本增强工具&#xff0c;采用独特的16-bit像素冒险风格界面设计。与传统AI工具不同&#xff0c;它将文…...

matlab基于CNN卷积神经网络的人脸表情情绪识别项目课题,采用GUI界面

matlab基于CNN卷积神经网络的人脸表情情绪识别项目课题&#xff0c;采用GUI界面&#xff0c; 【包括】 matlab源码&#xff0c;可以设置网络结构&#xff0c;训练方式等数据集&#xff08;7类表情&#xff0c;200多张人脸图像&#xff09;GUI界面。可显示整个测试集的结果&…...

AppKit:嵌入式Linux C++应用开发框架

1. 项目概述AppKit 是一个面向嵌入式 Linux 平台的 C14 应用开发框架&#xff0c;其设计目标明确指向两个核心工程诉求&#xff1a;提升应用层开发效率与增强运行时健壮性。在资源受限、实时性要求严苛、长期稳定运行成为刚需的嵌入式 Linux 场景中&#xff0c;开发者常面临重复…...

如何使用 Gherkin 解析器:Behat 测试的终极指南

如何使用 Gherkin 解析器&#xff1a;Behat 测试的终极指南 【免费下载链接】Gherkin Gherkin parser, written in PHP for Behat project 项目地址: https://gitcode.com/gh_mirrors/gh/Gherkin Gherkin 解析器是 Behat 项目的核心组件&#xff0c;它提供了一种简单而强…...

Pixel Dimension Fissioner效果展示:逻辑发散度调控前后的文本质量对比

Pixel Dimension Fissioner效果展示&#xff1a;逻辑发散度调控前后的文本质量对比 1. 工具概览 Pixel Dimension Fissioner是一款基于MT5-Zero-Shot-Augment核心引擎构建的创新型文本改写工具。它将传统AI文本处理功能重构为一个充满活力的16-bit像素冒险工坊&#xff0c;让…...

雪女-斗罗大陆-造相Z-Turbo生成效果对比:不同采样器与迭代步数下的画质差异

雪女-斗罗大陆-造相Z-Turbo生成效果对比&#xff1a;不同采样器与迭代步数下的画质差异 最近在尝试用AI生成一些动漫风格的角色图&#xff0c;特别是像《斗罗大陆》里“雪女”这样气质独特的角色。我发现&#xff0c;用同一个模型&#xff0c;比如“造相Z-Turbo”&#xff0c;…...

发现Pears:简单高效的GitHub加速工具,提升你的开发体验

发现Pears&#xff1a;简单高效的GitHub加速工具&#xff0c;提升你的开发体验 【免费下载链接】Pears 项目地址: https://gitcode.com/gh_mirrors/pe/Pears Pears是一款专为开发者打造的GitHub加速工具&#xff0c;旨在解决访问GitHub时可能遇到的速度慢、连接不稳定等…...

StructBERT小白入门:本地化中文复述识别工具快速上手

StructBERT小白入门&#xff1a;本地化中文复述识别工具快速上手 1. 工具简介与核心价值 StructBERT语义相似度工具是一个专门用于中文句子对匹配分析的本地化解决方案。它基于阿里云开源的StructBERT-Large模型&#xff0c;经过针对性优化后&#xff0c;能够准确判断两个中文…...

如何快速集成Twitter Feed到WordPress网站:Loklak Twitter Widget完整指南

如何快速集成Twitter Feed到WordPress网站&#xff1a;Loklak Twitter Widget完整指南 【免费下载链接】wp-tweet-feed-plugin 项目地址: https://gitcode.com/gh_mirrors/wp/wp-tweet-feed-plugin Loklak Twitter Widget是一款强大的开源工具&#xff0c;能够帮助Word…...

YF-S201水流量传感器原理、驱动库与工业应用实战

1. YF-S201水流量传感器库技术解析与工程实践指南1.1 传感器物理原理与硬件接口特性YF-S201是一种基于霍尔效应&#xff08;Hall Effect&#xff09;原理的脉冲式水流量传感器&#xff0c;其核心传感单元由叶轮、永磁体和霍尔开关组成。当水流经传感器腔体时&#xff0c;推动内…...

终极指南:如何快速上手PSLab for ExpEYES物理实验平台

终极指南&#xff1a;如何快速上手PSLab for ExpEYES物理实验平台 【免费下载链接】pslab-expeyes PSLab for ExpEYES - Science Experiments and Data Acquisition for Physics Education https://pslab.io 项目地址: https://gitcode.com/gh_mirrors/ps/pslab-expeyes …...

终极快速代码重构利器:fastmod 完整使用指南 [特殊字符]

终极快速代码重构利器&#xff1a;fastmod 完整使用指南 &#x1f680; 【免费下载链接】fastmod A fast partial replacement for the codemod tool 项目地址: https://gitcode.com/gh_mirrors/fa/fastmod 在软件开发过程中&#xff0c;大规模代码重构是每个开发者都会…...

ONLYOFFICE Docs合规性检查自动化:CI/CD流程中的安全扫描终极指南

ONLYOFFICE Docs合规性检查自动化&#xff1a;CI/CD流程中的安全扫描终极指南 【免费下载链接】DocumentServer ONLYOFFICE Docs is a free collaborative online office suite comprising viewers and editors for texts, spreadsheets and presentations, forms and PDF, ful…...

G-Helper:华硕笔记本性能释放与硬件管理的轻量革命

G-Helper&#xff1a;华硕笔记本性能释放与硬件管理的轻量革命 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: …...

CentOS 7等保测评踩坑记:手把手教你用脚本升级OpenSSH到9.6p1,修复高危漏洞

CentOS 7等保合规实战&#xff1a;OpenSSH 9.6p1自动化升级与风险控制全指南 当企业服务器面临等保测评时&#xff0c;OpenSSH版本漏洞往往是必须解决的高危项。去年某金融客户就因SSH弱版本导致合规延期&#xff0c;损失超百万。本文将分享一套经过50生产环境验证的自动化升级…...

Qwen3-0.6B-FP8服务器端集成:高并发API服务设计与实现

Qwen3-0.6B-FP8服务器端集成&#xff1a;高并发API服务设计与实现 想象一下这个场景&#xff1a;你的AI应用突然火了&#xff0c;用户量一夜之间翻了几十倍。早上打开监控面板&#xff0c;看到的不是增长曲线&#xff0c;而是满屏的“请求超时”和“服务器错误”。用户抱怨连连…...