promise对象是一种一步编程的解决方案,将异步操作,以同步的流程表达出来,避免了层层嵌套的回调函数,能解决异步处理的回调地狱问题。
promise构造函数带有一个resolve(解析)和reject(拒绝)两个参数的回调。在回调中执行一些操作(例如异步),如果一切正常调用resolve()否则使用reject(),已经实例化化过的promise对象可以调用promise.then()方法接受两个参数:onResolve和onReject,分别代表当前promise对象在成功时和失败时的回调函数。
promise的基本使用
const ljh = new Promise((resove,reject)=>{
if(...){
resove() // 代码正常
}
else{
reject() // 代码错误
}
});
ljh.then((res)=>{
//代码走了resove()执行这里
},(err)=>{
//代码走了reject()执行这里
})
注意:除了在then里可以捕获错误时回调,还可以使用catch()。代码如下
const ljh = new Promise((resove,reject)=>{
if(1){
resove() // 代码正常
}
else{
reject() // 代码错误
}
});
ljh.then((res)=>{
//代码走了resove()执行这里
}).catch((err)=>{
//代码走了resove()执行这里
})
promise的3种状态
Fulfilled为成功的状态,Rejected为失败的状态,Pending是初始状态
在Fulfilled状态下,会调用then方法,在Rejected状态下会调用catch方法
promise的其他两个方法
promise.all()
Promise.all([p1, p2, p3])用于将多个promise实例,包装成一个新的Promise实例,返回的实例就是普通的promise
它接收一个数组作为参数
当接收的全部promise状态都为Fulfilled的时候,返回的promise状态才为Fulfilled,执行then,如果有一个为Rejected,就执行catch,返回的是发生第一个Rejected的promise的结果
Promise.race()
类似于Promise.all() ,区别在于它有任意一个完成就算完成