Promise,简单来说就是一个容器,里面保存着某个未来才会结束的时间(通常是一个异步操作的结果),Promise英译:承诺的意思,未来会发生什么给你反返回出来.

Promise对象的基本语法:

new Promise((resolve,reject)=>{
//这里面为执行内容
})
从语法上来说,Promise是一个对象,从它可以获取异步操作的消息。

Promise基本语法和使用:

image.png//结果为:我是成功的

Promise对象特点和三个状态:

pomise使用 - 图3

image.pngimage.png
resolve下面的语句其实是可以执行的,那么为什么reject的状态信息在下面没有接受到呢?这就是因为Promise对象的特点:状态的凝固。new出一个Promise对象时,这个对象的起始状态就是Pending状态,在根据resolve或reject返回Fulfilled状态/Rejected状态。(起始状态,是哪一个,哪一个就会先凝固。)

Then分别接受resolve和reject的信息,有三种参数形式,第三种比较“怪异”,只用来接收做reject处理:

image.png
/4.catch写法
js的执行顺序就是这样,同步->异步->回调,在同步执行的时候,Promise对象还处于pending的状态,也说明了这个then返回的是一个Promise对象。
而且必须在then里面给一个返回值,才能继续调用,否则undefined。
pomise使用 - 图7
image.pngimage.png

Promise.resolve()

将现有对象转换为promise对象
pomise使用 - 图10
image.png//p.then打印结果为{name:’小明’,age:’18’}

对象解构

image.png

promise.reject

快速获取一个被拒绝的对象
pomise使用 - 图13

promise reject的两种写法

image.png

Promise.all()

Promise.all用于多个promise的实例包装成新的一个pomise实例(成功和失败包装的数据类型是不相同的)
pomise使用 - 图15

注意及运行结果展示:
成功之后就是数组类型,当所有状态都是成功状态才返回数组,只要其中有一个的对象是reject的,就返回reject的状态值。

Promise实现一个sleep函数

image.pngimage.png

Promise.race

同样是将pomise多个方法包装成一个新的promise实例,不同于all的是不同的是,race()接受的对象中,哪个对象返回的快就返回哪个对象,就如race直译的赛跑这样。如果对象其中有reject状态的,必须catch捕捉到,如果返回的够快,就返回这个状态。race最终返回的只有一个值.

image.png//结果为 500 error

异常处理:

为什么说安静,一个例子,Pormise内部的错误外界用try-catch捕捉不到

pomise使用 - 图19
image.pngimage.png
image.pngimage.png

pomise使用 - 图24