Promise初步认识

一、认识Promise

(1)Promise是异步操作的一种解决方案

①异步操作

(2)什么时候使用Promise:一般用来解决层层嵌套的回调函数的问题(回调低于callback hell)的问题

(3)promise(回调函数)实例化构造函数生成实例对象

①promise解决的不是回调函数,而是回调地狱

promise的状态,promise只有pending->fulfilled或者pending->rejected状态,当Promise状态发生了改变就不会再改变了

1、pending:初始状态

2、fulfilled:成功状态,调用了resolve

3、rejected:失败状态

③then(成功函数,失败函数)方法,

④data接受成功状态的参数,err接收失败的参数

(4)then()方法

①当pending->fulfilled时,执行then的第一个回调函数

   当pending->rejected时,执行then的第二个回调函数

②执行后的返回一个新的promise对象(成功态),then后面还可以then

③then方法返回的Promise对象的状态改变,此此时会输出err和success2

④在then的回调函数中,return后面的东西会用Promise包装一下等价于下图,所以再then一次默认是成功态Promise

⑤如果想让它成为失败态则可以自己写一个返回值

⑥使用Promise和then解决回调地狱的问题

1.当使用回调函数来控制盒子时,如果需要改变小球的移动,修改代码会变得很麻烦因为这是一个嵌套的模式

2.利用promise对move函数进行改造,如果需要交换动画的位置时可以随便改变,因为这是一个横向的结构互不影响

(5)catch专门用来处理rejected状态,catch本质上是then的特例

①基本用法:捕获前面的错误,一般总是建议,

Promise对象后面要跟catch方法,这样可以处理Promise内部发生的错误,可以使用throw new Error来制造一个新的错误

(6)finally )只要Promise状态发生变化,无论发生什么状态就会执行,不发生变化则不执行

①finally不接收参数

②本质:也是then()方法的一个特例

二、构造函数方法

(1)Promise.resolve():是成功状态Promise的一种简写形式

(2)参数

①一般参数

②Promise作为参数:后面then方法的回调函数执行哪一个取决于传入的Promise

③具有then方法的对象作为参数,则会执行then函数

(3)Promise.reject():失败

①参数:不管什么参数,都会原封不动的向后传递,作为后续方法的参数

(4)Promise.all()关注多个Promise对象的状态变化,传入多个Promise实例,包装成一个新的Promise实例返回

①Promiseall()的状态变化与所有传入的Promise实例对象状态有关

②所有状态都变成resolved,最终的状态才会变成resolved

③只要有一个变成rejected,最终的状态就会变成rejected

(5)Promise.race()

①Promise.race()的状态取决于第一个完成Promise实例对象,如果第一个完成的成功了,那最终就成功,如果第一个完成的失败了,那最终的就失败

(6)Promise.Settled()的状态与传入的Promise的状态无关永远它都只会忠实的记录下各个PRomise的表现

三、注意事项

(1)resolve或reject函数执行后的代码

①推荐在调用resove或reject函数的时候加上returna,不再执行它们后面的代码

(2)Promise.all/rece/allSettled的参数问题

①参数如果不是Promise数组,会将不是Promise的数组元素转变成Promise对象

②只要是任何可遍历的都可以作为参数(数组、字符串、set、map、nodelist、arguments

(3)错误处理

三、await 和async相当于是promise的一个语法糖

(1)当async执行后他的输出的结果是一个Promise对象,而且是已完成的

 

 同样的我们可以让async里面返回一个promise,并且调用then来接受状态

 (2)await相当于就是then,如下,then通过回调函数,来接收返回值

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder__Song

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值