Promise

本文探讨了JavaScript中的回调地狱问题及其对代码可维护性和可读性的影响。ES6引入的Promise作为解决方案,介绍了Promise的基本概念、then-fs模块的使用、.then()、.catch()、Promise.all()和Promise.race()方法。最后提到了async/await作为简化Promise异步操作的方式,并强调了使用async/await的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回调地狱

多层回调函数的相互嵌套,形成了回调地狱
缺点

  • 代码耦合性太强,牵一发而动全身,难以维护
  • 大量冗余的代码相互嵌套,代码的可读性变差

如何解决回调地狱

为了拒绝回调地狱的问题,ES6中新增了Promise

promise的基本概念

①promise是一个构造函数

  • 我们可以创建Promise的实例 let p=new Promise()
  • new 出来的Promise实例对象,代表一个异步操作

②Promise.prototype上包含了一个.then()方法

  • 每一次 new Promise() 构造函数得到的实例对象,都可以通过原型链的方式访问到 .then() 方法,比如:p.then()

③.then() 方法用来预先指定成功和失败的回调函数

  • p.then(成功的函数,失败的函数)
  • p.then(resolve=>{}.err=>{})
  • 调用 .then() 方法是必选的,失败的回调函数是可选的

基于then-fs异步的读取文件内容

①安装then-fs模块

npm i then-fs

then-fs的基本使用

调用 then-fs 提供的 readFile() 方法,可以异步的读取文件的内容,它的返回值是 Promise 的实例对象,因此可以调用 .then() 方法为每一个 promise 异步操作指定成功和失败的回调函数,但是,无法保证文件的读取顺序
在这里插入图片描述

.then() 方法的特性

如果上一个 .then() 方法中返回了一个新的 Promise 实例对象,则可以通过下一个 .then() 继续进行处理,通过 .then() 方法的链式调用,解决了回调地狱问题
在这里插入图片描述

.catch 捕获错误

在 Promise 的链式操作中如果发生了错误,可以使用 promise.prototype.catch 方法进行捕获和处理
在这里插入图片描述
如果不希望前面的错误导致后续的 .then() 无法正常执行,则可以将 .catch() 方法的调用提前
在这里插入图片描述

Promise.all() 方法

Promise.all() 方法会发起并行的 Promise 异步操作,登所有的异步操作全部结束后才会执行下一步的操作(等待机制)
在这里插入图片描述

Promise.race() 方法

Promise.race() 方法会发起并行的 promise 异步操作,只要有一个异步操作完成,就会执行下一步 .then() 操作 (赛跑机制)
在这里插入图片描述

基于Promise封装异步读取文件

在这里插入图片描述

async/await

使用 async/await 简化 Promise 异步操作

在这里插入图片描述
注意事项
①如果在 function 中使用了 await,则 function 必须被 await 修饰
在 async() 方法中,第一个 await 之前的代码会同步执行,await 之后的代码会异步执行
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值