promise有三种状态;分别为:pending,resolved,rejected:,
初始状态为pending,而他又可以变为其他两种状态;
//先创建一个promise函数
methods:{
promiseTest(){
//创建一个promise
const p1=new Promise((resolve,reject)=>{
})
console.log(p1,'p');
}
},
created(){
this.promiseTest()
}
打印输出之后,能够看出现在的promise是处于pending状态的;那如何改变这个状态呢?
methods:{
promiseTest(){
//创建一个promise
const p1=new Promise((resolve,reject)=>{
})
console.log(p1,'p');
const p2=new Promise((resolve,reject)=>{
resolve()
})
console.log(p2,'p');
}
},
created(){
this.promiseTest()
}
将传入的resolved传入,这时候他的状态改变了,变成了fulfilled状态的,其实也就是变成了我们说的resolve状态,同理我们传入reject那状态也就变成了rejected状态了;
后面继续模拟异步任务,一般是用setTimeout来模拟异步任务的;
const p4=new Promise((resolve,reject)=>{
setTimeout(() => {
resolve()
}, 1000);
})
console.log(p4,'p4');
这个时候我们打印一下 看会出现什么:
这个地方外面是pending状态当你打开之后发现他的状态其实已经是fulfilled状态了,这是因为在你执行这个函数的时候他首先会执行同步任务再执行异步任务,他的console.log是同步任务所以先执行了,这个时候状态还没有改变,如果你将事件设置十秒的话,你在刷新页面之后看他的打印状态会发现都是pending状态,十秒之后会变成fulfilled状态
promise在pending状态的时候是不会触发他的then方法和catch方法的;
在resolve状态下会触发then()方法,在reject状态下会触发catch方法
在promise里 无论是then还是catch,只要没有抛出异常那最终promise.then或者promise.catch返回的都是一个resolved状态的promise,如果抛出异常,不论你前面的then和catch是成功还是失败,他返回的都是一个rejected状态的promise