这是我参与「第四届青训营 」笔记创作活动的第五天
介绍
promise很强,很好用。它的用途就是为了避免再多层回调函数嵌套的时候,代码便繁杂以及难以维护
内容
-
promise异步编程挺好用的
-
首先是特点
-
第一个
- promise的实例对象一般都会放在函数内,这是因为promise的实例一旦创建就会执行,所以我们一般放在一个函数里,想用就用
-
第二个
- promise一般使用在时间settimeout的使用,和ajax请求时想要请求完成再运行和页面数据想要计算完毕或者得到完之后再运行
-
语法
-
三个状态
- pending,fulfilled和rejected
- 第一个是进行中,一般再调用的时候就是这个状态
- 第二个是已完成
- 第三个是已失败
- 注意:fulfilled和rejected两个状态的转变是需要我们自己去控制的,而不是代码运行成功调用fulfilled和代码出现异常调用第二个
- 引入一个概念resolved(定型的),这是promise异步的特点,他就是一旦状态发生改变,就不会再次改变,我们通常将resolved代表pendign和fulfilled
-
then
-
then是promise对象的方法,它接受两个参数,其中第二个是可变参数
-
两个参数都得是函数
-
前面的代表成功后调用的回调函数
-
后面的代表失败后调用的回调函数
-
-
catch
- catch是捕抓两个状态的回调函数(resolved,rejected)出现的异常而设立的
- 目的是为了防止出现异常而导致后面的js代码不能正常执行
- catch直接跟在两个回调函数的后面
-
all
-
all的设计就是为了等和遍历
-
这里注意调用all我们不会再调用实例对象,我们会直接调用Promise这个父类的all方法
-
语法
-
all会接受一个数组,数组里面装着你想调用的多个promise的实例对象
-
然后all会遍历所有的promise对象,然后把所有的结果放进一个数组里
-
all后面也会跟着一个方法then,使用方法跟上面的then一样
-
-
race
-
其实这个名字就取得很好
-
race嘛,比赛嘛,所以数组里面的所有promise对象如果那个先执行完,就会先调用then给这个胜利者,之后这个then就被废弃了,
-
上面的意思抽象点的话,就是里面的promise子对象如果状态发生改变,不管哪个先改变,改变成什么状态,都会让父promise对象的状态发生改变
-
all和race的本质都是设计一个父promise对象,里面装着所有的子promise对象,根据子对象发生的状态改变,进行相应的状态改变
-
-
常识
- 既然说promise是为了避免繁琐的嵌套的回调函数的发生情况,那么当然要设置很多个promise对象才有用啊,所以其实promise的成功回调函数里面,我们会返回下一个我们想要继续执行的promise对象实例,