promise 基础知识
proise:
1.Promise是异步编程的一种解决方案,它有三种状态,分别是pending-进行中、resolved-已完成、rejected-已失败
2.创建实例
//method1
let promise=new Promise((resolve,reject)=>{
if(success){
resolve();
}else{
reject();
}
})
//method2
function promise(){
return new Promise(function(resolve,reject){
if(success){
resolve();
}else{
reject();
}
})
}
3.Promise.prototype.then() VS Promise.prototype.catch()
.then()方法使Promise原型链上的方法,它包含两个参数方法,分别是已成功resolved的回调和已失败rejected的回调
promise.then(
() => { console.log('this is success callback') },
() => { console.log('this is fail callback') }
)
应该用👇
promise.then(
() => { console.log('this is success callback') }
).catch(
(err) => { console.log(err) }
)
//example
new Promise(function(resolve,reject){
throw new Error('this is custom error.')
}).catch(
console.log("error captured.");
)
4.Promise.resolve() / Promise.reject()
Promise.resolve()会根据参数情况返回不同的Promise:
参数是Promise:原样返回
参数带有then方法:转换为Promise后立即执行then方法
参数不带then方法、不是对象或没有参数:返回resolved状态的Promise
Promise.reject()会直接返回rejected状态的Promise
5.Promise.all()
参数为Promise对象数组,如果有不是Promise的对象,将会先通过上面的Promise.resolve()方法转换
var promise = Promise.all( [p1, p2, p3] )
promise.then(
...
).catch(
...
)
当p1、p2、p3的状态都变成resolved时,promise才会变成resolved,并调用then()的已完成回调,但只要有一个变成rejected状态,promise就会立刻变成rejected状态
6.Promise.race()
var promise = Promise.race( [p1, p2, p3] )
promise.then(
...
).catch(
...
)
参数中的p1、p2、p3只要有一个改变状态,promise就会立刻变成相同的状态并执行对于的回调
7.Promise.done() / Promise.finally()
Promise.done() 的用法类似 .then(),它的主要作用是在回调链的尾端捕捉前面没有被 .catch() 捕捉到的错误
Promise.finally() 接受一个方法作为参数,这个方法不管promise最终的状态是怎样,都一定会被执行