Promise,简单来说就是一个容器,里面保存着某个未来才会结束的时间(通常是一个异步操作的结果),Promise英译:承诺的意思,未来会发生什么给你反返回出来.
Promise对象的基本语法:
new Promise((resolve,reject)=>{
//这里面为执行内容
})
从语法上来说,Promise是一个对象,从它可以获取异步操作的消息。
Promise基本语法和使用:
Promise对象特点和三个状态:
resolve下面的语句其实是可以执行的,那么为什么reject的状态信息在下面没有接受到呢?这就是因为Promise对象的特点:状态的凝固。new出一个Promise对象时,这个对象的起始状态就是Pending状态,在根据resolve或reject返回Fulfilled状态/Rejected状态。(起始状态,是哪一个,哪一个就会先凝固。)
Then分别接受resolve和reject的信息,有三种参数形式,第三种比较“怪异”,只用来接收做reject处理:
/4.catch写法
js的执行顺序就是这样,同步->异步->回调,在同步执行的时候,Promise对象还处于pending的状态,也说明了这个then返回的是一个Promise对象。
而且必须在then里面给一个返回值,才能继续调用,否则undefined。
Promise.resolve()
将现有对象转换为promise对象
//p.then打印结果为{name:’小明’,age:’18’}
对象解构
promise.reject
promise reject的两种写法
Promise.all()
Promise.all用于多个promise的实例包装成新的一个pomise实例(成功和失败包装的数据类型是不相同的)
注意及运行结果展示:
成功之后就是数组类型,当所有状态都是成功状态才返回数组,只要其中有一个的对象是reject的,就返回reject的状态值。
Promise实现一个sleep函数
Promise.race
同样是将pomise多个方法包装成一个新的promise实例,不同于all的是不同的是,race()接受的对象中,哪个对象返回的快就返回哪个对象,就如race直译的赛跑这样。如果对象其中有reject状态的,必须catch捕捉到,如果返回的够快,就返回这个状态。race最终返回的只有一个值.
异常处理:
为什么说安静,一个例子,Pormise内部的错误外界用try-catch捕捉不到