Promise 承诺机制
- 是一个容器,存放着某个未来才会结束的事件结果(通常是一个异步操作)
- 是一个对象,可以获取到异步操作的消息。
参数是一个异步处理函数,如果异步执行成功,调用resolve函数,如果异步执行失败,调用reject函数
let p = new Promise((resolve,reject)=>{//异步操作});
内部异步执行成功的回调函数
p.then((response)=>{});
内部异步执行失败的回调函数
p.catch((error)=>{});
Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
Promise.resolve() 方法
将现有对象转化为Promise对象,并且Promise对象的状态为Resolved状态
let p1 = Promise.resolve(p);
- 参数p的类型:
- 参数是一个Promise实例
不做任何修改,原封不动的返回这个实例 - 参数是一个thenable对象
thenable对象指的是具有then方法的对象
将这个对象转化为Promise对象,并且立即执行对象中的then方法 - 参数是一个非thenable对象
返回一个新的Promise对象,状态为resolved - 不带参数
直接返回一个Resolved状态的Promise对象。
Promise.reject() 方法
返回一个新的Promise对象,状态为rejected
finally() 方法
用于指定不管Promise对象最后状态如何,都会执行的操作。接受一个回调函数,不管怎样都会执行。
Promise.all() 方法
用于将多个 Promise 实例,包装成一个新的 Promise 实例。
let p = Promise.all([p1,p2,p3]);
p的参数由p1,p2,p3决定,分为两种情况:
- 三个状态都为resolved时,p的状态才为resolved,返回的是由p1,p2,p3返回值组成的数组
- 三个中有一个状态为rejected,p的状态就为rejected,返回第一个被reject的实例的返回值
Promise.race() 方法
用于将多个 Promise 实例,包装成一个新的 Promise 实例。
let p = Promise.race([p1,p2,p3]);
只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。
p的返回值中放的是率先改变状态的Promise实例的返回值