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

Javascript提高:JavaScript Promise 超通俗解释-由Deepseek产生

JavaScript Promise 超通俗解释

Promise是 JS 中专门用来处理异步操作的对象,它解决了传统回调函数的「回调地狱」问题,让异步代码(比如请求接口、读取文件、定时器)写起来像同步代码一样清晰、好维护。

简单说:Promise 就是一个“承诺”—— 异步操作现在没结果,但未来一定会给你一个结果(成功/失败)。


1. Promise 的三种状态

Promise 一生只有 3 种状态,状态一旦改变就固定,不可逆

  1. pending(等待中):初始状态,异步任务正在执行(比如接口还没返回、定时器还没到时间)
  2. fulfilled(已成功):异步任务执行成功,会返回结果
  3. rejected(已失败):异步任务执行失败,会返回错误

状态变化只有两种:

  • pending → fulfilled(成功)
  • pending → rejected(失败)

2. 基础语法:创建和使用 Promise

① 创建 Promise

new Promise()构造函数,里面包裹异步代码:

// 定义一个 Promise 函数functionwaitTime(time){// 返回 Promise 对象returnnewPromise((resolve,reject)=>{// 异步操作:定时器setTimeout(()=>{if(time>0){// ✅ 成功:调用 resolve,把结果传出去resolve(`等待了${time}毫秒,执行成功`);}else{// ❌ 失败:调用 reject,把错误传出去reject("时间不能小于等于0");}},time);});}
  • resolve:成功时调用,把状态改为fulfilled
  • reject:失败时调用,把状态改为rejected

② 使用 Promise

.then()接收成功结果,.catch()捕获错误,.finally()无论成功失败都会执行:

waitTime(2000).then((result)=>{// 成功回调:拿到 resolve 的数据console.log(result);// 输出:等待了 2000 毫秒,执行成功}).catch((error)=>{// 失败回调:拿到 reject 的错误console.error(error);}).finally(()=>{// 最终回调:无论成功/失败都执行(常用于关闭加载、清理操作)console.log("异步操作结束");});

3. 核心优势:解决回调地狱

传统异步嵌套(回调地狱,代码嵌套多层,可读性极差):

// 回调地狱 ❌setTimeout(()=>{console.log("第一步");setTimeout(()=>{console.log("第二步");setTimeout(()=>{console.log("第三步");},1000);},1000);},1000);

用 Promise 链式调用(扁平化,逻辑清晰):

// Promise 链式调用 ✅waitTime(1000).then(()=>{console.log("第一步");returnwaitTime(1000);// 返回新 Promise,继续链式}).then(()=>{console.log("第二步");returnwaitTime(1000);}).then(()=>{console.log("第三步");});

4. 进阶:async/await(Promise 语法糖)

ES7 推出的async/await是 Promise 的最简写法,让异步代码完全像同步代码:

// 用 async 标记函数是异步函数asyncfunctiondoTask(){try{// await 等待 Promise 完成,直接拿到结果constres1=awaitwaitTime(1000);console.log(res1);constres2=awaitwaitTime(1000);console.log(res2);}catch(error){// 统一捕获所有错误console.error(error);}}doTask();
  • await必须写在async函数里
  • await后面跟 Promise 对象,会暂停等待Promise 完成
  • try/catch捕获错误,替代.catch()

5. 常用 Promise 静态方法

Promise.all()

并行执行多个 Promise,全部成功才返回结果,一个失败就整体失败(常用于批量请求接口)

constp1=waitTime(1000);constp2=waitTime(2000);// 等待所有 Promise 完成Promise.all([p1,p2]).then((results)=>{console.log(results);// [结果1, 结果2]}).catch((err)=>{console.log("有一个失败了");});

Promise.race()

谁先完成(成功/失败)就返回谁的结果(常用于接口超时控制)

Promise.resolve()/Promise.reject()

快速创建一个成功/失败的 Promise。


总结

  1. Promise 是异步编程解决方案,解决回调地狱,让代码更优雅
  2. 三种状态:pendingfulfilled/rejected(状态不可逆)
  3. 核心方法:.then()成功、.catch()失败、.finally()最终
  4. 最简写法:async/await(Promise 语法糖)
  5. 常用工具:Promise.all()并行执行多个异步任务
http://www.jsqmd.com/news/539714/

相关文章:

  • 别再死记ResNet结构了!用PyTorch手把手复现ResNet34,搞懂残差连接为什么能解决‘退化’问题
  • 2026想申港大本科?专业港大本科申请中介推荐(附联系方式) - 品牌2026
  • C++的std--ranges适配器视图元素修改与原数据可变性在算法中的保证
  • AI 开发实战:异常处理怎么设计,AI 才能帮你真正找出薄弱点
  • CI2451实战指南:一款2.4G无线SoC芯片,如何让遥控玩具和灯控设计更简单?
  • 设置Linux命令行提示符shell prompt的前缀颜色,区分命令和输出结果(重连、重启都不会消失)
  • LuckyLilliaBot实战指南:从零构建NTQQ机器人系统
  • 天梯赛L2题解(029-032)
  • 像素幻梦创意工坊实战:为Unity游戏项目批量生成像素资源包
  • Markdown Viewer浏览器插件:快速预览Markdown文档的终极指南
  • 拖拽生成!这款编辑器做到了!告别代码妥妥的!
  • 下载 | Win11 25H2 官方正式版ISO映像!(3月更新、消费者版/专业版、商业版/企业版、26200.8037)
  • CSS 渐变的高级应用:色彩的流动艺术
  • 保姆级教程:用C语言数组手算1000的阶乘,解决PTA编程题(附完整代码)
  • 2026深圳美国留学申请中介推荐,高端美国留学中介服务流程与口碑盘点 - 品牌2026
  • 如何快速掌握茉莉花插件:面向中文文献管理者的终极Zotero优化指南
  • OpenClaw QQ 插件 v0.6.0 发布:率先适配OpenClaw新版本Plugin-SDK
  • 优麦云亚马逊营销云AMC功能与作用精准解析 | 最新优惠码速领 - 麦麦唛
  • 滚动轴承故障诊断系统设计:基于凯斯西储大学数据
  • 别等 Sora 了!一代神话陨落?OpenAI 这一手“弃车保帅”我看懂了...
  • 自适应模型预测控制在无人驾驶汽车轨迹跟踪中的应用
  • YOLO入门
  • 流式液相检测技术(CBA)研究进展
  • 做小月子要注意什么?科学修护指南
  • C++基础笔记(7):拷贝构造函数
  • 函数式编程的架构目标
  • 2026SAT精品小班辅导机构怎么选?高分备考优质SAT小班机构测评 - 品牌2026
  • 纯手工搭建:基于Matlab/Simulink的增程式混合动力汽车建模仿真模型教程
  • 【笔记】用cursor手搓cursor(三)简单尝试claude code
  • 开发者效率周刊 #01