ES6-Promise
promise
promise就是一个对象,存储着异步函数返回的结果
promise有三种状态:
1.pending(进行中)
2.fulfilled(已完成)更多则用resolved
3.rejected(已失败)
这三种状态,什么时候展现,就看异步函数返回的结果.
promise对象是一个构造函数
例子:
new Promise((resolve,reject)=>{
console.log('Promise','test');
//reject(); // test1
resolve(); //test2
}).then(() => {
console.log('resolved','test')
}).catch(() => {
console.log('hi','test')
})
////test1 output:
Promise test
hi test
///test2
output:
Promise test
resolved test
reslove 代表成功之后执行的行数,调用reslove()则就执行then方法.
.then可以有多个方法,将依次执行.
调用reject(),则就执行失败后回调的方法.catch里面的方法
例子2:
在一个函数中返回一个promise对象,当调用该函数时,去判断是否执行哪个回调函数
function doSomething(index) {
return new Promise((resolve,reject) => {
console.log('promise created!')
if( index > 5){
resolve();
} else reject();
})
}
doSomething(2).then((value) =>{
console.log('我大于5哦~')
}).catch((value) => {
console.log('我小于5哦~')
})
/// output
promise created!
我小于5哦~
Ps:如果在doSomething函数中不去返回promise对象,就在调用改函数时用then方法,是会报错!!!!
执行顺序: promise创建后就会执行,当所有的同步执行结束后才会执行then等回调函数.
一个promise对象的结果作为参数给另一个promise对象
const p1 = new Promise(function (resolve,reject) {
reject();
})
const p2 = new Promise(function(resolve,reject) {
resolve(p1);
})
p1.then(() => {
console.log('p1 resolve')
}).catch(()=> {
console.log('p1 reject')
})
p2.then(() =>{
console.log('p2 resolve')
}).catch(() => {
console.log('p2 reject')
})
/// output
p1 reject
p2 reject
即p1的结果会影响到p2
promise的finally()方法
promise
.then( result => {...})
.catch( error => {...})
.finally(() => {...})
finally方法就是无论promise对象的最后状态如何,都会执行的方法.