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

解锁 JavaScript 异步编程:Promise 链式操作、async/await 与 Promise.all 深度剖析

1.引言

在 JavaScript 的世界里,异步编程是一个核心且关键的概念。随着 Web 应用的复杂度不断提升,处理多个异步操作的需求也日益增长。传统的回调函数方式容易陷入 “回调地狱”,让代码的可读性和可维护性大打折扣。而 Promise 的出现为异步编程带来了新的曙光,后续又衍生出了 async/await 语法糖以及 Promise.all 等实用方法。今天,我们就来深入探讨这三者在异步编程中的应用和区别。

2.Promise 链式操作:异步操作的有序舞蹈

基本原理

Promise 是一个表示异步操作最终完成或失败及其结果的对象。它有三种状态:进行中(pending)、已成功(fulfilled)和已失败(rejected)。Promise 链式操作通过 .then() 方法来依次处理异步操作的结果,每个 .then() 方法都会返回一个新的 Promise 对象,从而可以继续链式调用。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><!-- 目标:使用 Promise 链式调用,解决回调函数地狱问题做法:每个 Promise 对象中管理一个异步任务,用 then 返回 Promise 对象,串联起来目标:把回调函数嵌套代码,改成Promise链式调用结构需求:获取默认第一个省,第一个市,第一个地区并展示在下拉菜单中--><form><span>省份:</span><select><option class="province"></option></select><span>城市:</span><select><option class="city"></option></select><span>地区:</span><select><option class="area"></option></select></form><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>//全局变量let pname = ''//1.获取省份Promise对象axios({url: 'https://hmajax.itheima.net/api/province'}).then(result => {console.log(result.data.list);pname = result.data.list[0]document.querySelector('.province').innerHTML = pname//2.得到-获取城市Promise对象return axios({url: 'https://hmajax.itheima.net/api/city',params: {pname//pname:pname}})}).then(result => {let cname = result.data.list[0]console.log(result.data.list);document.querySelector('.city').innerHTML = cname//3.得到-获取地区Promise对象return axios({url: 'https://hmajax.itheima.net/api/area',params: {pname,cname}})}).then(result => {console.log(result);document.querySelector('.area').innerHTML = result.data.list[0]})</script>
</body></html>

优缺点分析

优点是可以将多个异步操作按顺序依次执行,避免了回调函数的嵌套,一定程度上提高了代码的可读性。缺点是当异步操作较多时,链式调用会变得冗长,并且错误处理集中在 .catch() 方法中,难以精准定位错误发生的位置

3.async/await:异步代码的同步之美

基本原理

async/await 是 ES2017 引入的语法糖,建立在 Promise 之上。async 用于定义一个异步函数,该函数总是返回一个 Promise。await 只能在 async 函数内部使用,它会暂停 async 函数的执行,直到等待的 Promise 被解决,并返回其结果。

http://www.lryc.cn/news/539061.html

相关文章:

  • Centos虚拟机扩展磁盘空间
  • 记录一次部署PC端网址全过程
  • 利用 OpenCV 进行棋盘检测与透视变换
  • Java Spring boot 篇:常用注解
  • #渗透测试#批量漏洞挖掘#Apache Log4j反序列化命令执行漏洞
  • 【Linux】Linux 文件系统——关于inode 不足的相关案例
  • k8s集群如何赋权普通用户仅管理指定命名空间资源
  • 工控网络安全介绍 工控网络安全知识题目
  • AIGC(生成式AI)试用 21 -- Python调用deepseek API
  • 跨平台AES/DES加密解密算法【超全】
  • Webpack 基础入门
  • deepseek-v3在阿里云和腾讯云的使用中的差异
  • Mathtype安装入门指南
  • 使用 Apache PDFBox 提取 PDF 中的文本和图像
  • 【js逆向_入门】图灵爬虫练习平台 第四题
  • Redis7——基础篇(三)
  • 深度学习中的知识蒸馏
  • 【Windows软件 - HeidiSQL】导出数据库
  • 苏剑林“闭门造车”之多模态思路浅谈思考
  • 绿联nas docker 安装 rocketmq 队列。亲测可用
  • C++(23):unreachable
  • 初等数论--欧几里得算法
  • 阿里云前端自动化部署流程指南
  • EXCEL解决IF函数“您已为此函数输入太多个参数”的报错
  • CAS单点登录(第7版)18.日志和审计
  • 2025年软件测试面试题大全(附答案+文档)
  • 太空飞船任务,生成一个地球发射、火星着陆以及下一次发射窗口返回地球的动画3D代码
  • IDEA——Mac版快捷键
  • 智能体系统(AI Agent System)是什么?——从概念解析到企业数字化转型的全景落地及投资视角
  • Vue 前端开发中的路由知识:从入门到精通