Promise对象及它在js中的执⾏顺序
关于Promise对象的学习及它的执⾏顺序
学习阮⼀峰⽼师的后的记录
1、promise的定义
promise是⼀个对象,通常包裹着⼀个异步操作,promise对象提供⼀些接⼝的⽅法,返回⼀些操作的状态或错误信息resolved是什么状态
promise有三种状态 pending(进⾏中)、resolved(已完成,也叫fulfilled)、rejected(已失败)
注意:promise中的状态只能由 pending -> resolved 和 pending -> rejected两种,且状态⼀旦确认不能转变
promise的基本⽤法
<script>
let promise = new Promise(function(resolve,reject){//resolve和reject是函数
console.log('promise创建');
resolve();
})
promise.then(function(){//相当于resolve()
// console.log(a);//error跳到.catch
console.log('promise的执⾏完成了');
})
.catch(function(){//相当于reject()
console.log('promise的执⾏失败了');
})
</script>
2、promise的⼀些⽅法
.then(fn1,fn2)
.then()⽅法中的参数,fn1是resolved状态的回调函数,fn2(可选)是rejected状态的回调函数,⼀般只⽤fn1来作为promise成功的处理函数
注意:.then()返回的是⼀个新的promise实例,.then(fn1)fn1中的返回的数据作为新promise的参数
.catch(fn)
.then(null/undefined,function(){})的别名,是发⽣错误是的回调函数
注意:在promise执⾏顺序中当.then()的成功处理函数执⾏,导致不会执⾏.catch()中的函数,反之⼀样
.finally(function(){})
不论是执⾏.then()还是执⾏.catch(),finally都会执⾏
代码⽰例:
<script>
let promise = new Promise(function(resolve,reject){
let i = 1;
resolve(i);//调⽤.then()中的⽅法
i++;
reject(i);//调⽤.catch()中的⽅法,不能与.then()⼀起执⾏
})
promise
.then(function(num){
console.log(num);
})
.catch(function(num){
console.log(num);
})
.finally(function(){//不论执⾏.then还是.catch,finally都会执⾏
console.log('finally');
})
</script>
3、promise中的执⾏顺序
js执⾏是单线程的,所以浏览器执⾏会把js事件,划分为当前执⾏,和等待执⾏的栈
等待执⾏中的栈⼀般为异步事件,其中也分为宏任务和微任务之分,⼀般是执⾏⼀个宏任务后,执⾏微任务栈⾥的所有微任务,在接着执⾏下⼀个宏任务,在执⾏任务途中会将对应的宏任务和微任务依次添加到对应的栈中(也就是说在下⼀个宏任务执⾏之前,微任务的等待栈是空的)
promise对象.then,.catch为微任务
代码⽰例:
<script>
setTimeout(function(){
console.log('setTimeout执⾏了');//宏任务
})
let promise = new Promise(function(resolve,reject){
console.log('promise执⾏了');//主进程
resolve();//or reject();
})
promise
.then(function(){
console.log('.then执⾏了');//微任务
})
.catch(function(){
console.log('.catch执⾏了');//微任务
})
.finally(function(){
console.log('finally执⾏了');//微任务
})
</script>
上⾯代码的执⾏顺序是:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。