#什么是Promise?
Promise是用来管理异步操作的对象,可以获取成功(或失败)的结果
#Promise的状态?
Promise 必然处于 3 种状态中的某一种,调用resolve,reject 的本质就是更改他的状态
3 种状态:
1. 待定(pending): 初始状态,既没有被兑现(resolve),也没有被拒绝(reject)
2. 已兑现(fullfilled): 意味着操作成功完成
3. 已拒绝(rejected): 意味着操作失败
特点:
1.promise对象的状态一旦改变,不可逆(只能改变一次)
2.可以通过Promise.resolve()静态方法直接得到一个成功状态的promise对象
————特点是:只会触发 .then()不会触发.catch()
可以通过Promise.reject()静态方法直接得到一个失败状态的promise对象
————特点是:只会触发,catch()不会触发.then()
#链式编程
##什么是链式编程?
链式编程允许将多个操作(如方法调用)链接在一起。链式编程通常是通过返回同一个类型的对象的方式来实现。
(在一个对象可以重复点出方法,这个方法返回同一个类型的对象)
##链式编程-基本使用
作用:Promise的链式编程是用来解决【回调函数地狱】的一种写法,让多层嵌套的代码变得可读性强
语法:promise对象.then().catch()
场景:
/*
* 特点:
* 1. 后面的 .then是可以接受到前面.then返回的成功状态下的值
* 2. 后面的.catch是可以接受前面.then中返回的失败状态下的值
* 3. 一旦在某个.then里面返回的是一个失败状态的Pormise,则直接跳过其他
* 的.then进入到.catch执行
*
* 总结:
* 写法: p.then().then()....catch()
* 注意点:如果 后一个.then需要用到前一个.then中的结果,需要在前一个
* .then中 显示return一下
* */
#Promise的静态方法
Promise的静态方法有5个
其中reslove()与reject()是返回成功或失败的结果;promise.race 返回最快的结果;promise.all全部执行,一旦遇到失败就终止;promise.allSettled 全部执行,不管遇到失败都全部执行
##Promise.race()
什么是Promise.race()
Promise.race()方法用于处理一组异步操作,并返回第一个完成的异步操作的结果
race方法:可以执行一组异步对象
注意点:最快的那个异步对象如果是成功状态,则使用.then()来接受结果,否则使用.catch()来接收结果
应用场景:多个服务器提供相同的数据,但响应时间不同,你想要最快的那个服务器给你响应数据
##Promise.all()
是什么:Promise.all方法用于处理多个Promise实例,如果所有Promise实例都成功完成,将所有成功的结果作为一个数组返回,如果任何一个Promise实例失败,返回第一个失败的Promise实例的原因
/*
* 总结:
* Promise.all的作用是?
* 执行一组p对象,如果所有成功则返回所有的执行结果(数组类型)
* .them() 接收成功的结果
* 如果有一个执行失败,直接返回失败的数据 (.catch来接收)
*
* 缺点:只要有一个失败了,其他的都拿不到数据
* 场景:多个请求要么同时拿到成功的数据,要么一个不要
* */
##Promise.allSettled()
全部执行,不管遇到失败都获取结果
使用.then来接收所有结果参数固定格式为:
#Promise面试
1.讲什么情况下回产生回调地狱?
多个接口请求之间时有依赖关系的 例如 市的接口以来于省这个接口的数据 区以来与市和省的接口数据
2.回调地狱写法有什么特点?
代码不好维护
.then(res=>{
.then(res=>{
.then(res=>{
})
})
})
3. 请讲一下promise链式编程时解决什么问题的?
Promise链式编程可以解决不好维护代码的问题,多个.then()之间时一个平级关系
.then(res=>{ return promise })
.then(res=>{})
.then(res=>{})