概念
所谓Promise,就是一个待执行的事件,它主要就是用来解决回调地狱的问题,并且它的状态是不可逆的,他有三个状态: pending(等待态),fulfiled(成功态),rejected(失败态)
使用
Promise是一个构造函数,它接收一个参数是函数,接收的这个函数需要传入两个参数,分别是
- resolve :异步操作执行成功后的回调函数
- reject:异步操作执行失败后的回调函数
let p = new Promise((resolve, reject) => {
//做一些异步操作
setTimeout(() => {
console.log('执行完成');
resolve('我是成功!!');
}, 2000);
})
之后可用通过then链式操作的用法
p.then((data) => {
console.log(data);
})
.then((data) => {
console.log(data);
})
.then((data) => {
console.log(data);
})
从表面上看,Promise只是能够简化层层回调的写法,
而实质上,Promise的精髓是“状态”,用维护状态、传递状态的方式来使得回调函数能够及时调用,
它比传递callback函数要简单、灵活的多。
常用方法
捕获错误的方法 catch()
它用来指定reject的回调。用法:效果和写在then的第二个参数里面一样。不过它还有另外一个作用:在执行resolve的回调(如果抛出异常了),会进到这个catch方法中
解析全部方法 all()
Promise.all()方法接受一个数组作为参数,p1、p2、p3都是 Promise 实例 只有p1、p2、p3的状态都成功才还会返回成功
竞赛 race()
只要p1、p2、p3哪个最先改变状态,那么它的状态也随之更改