前端经典⾯试题之promise、async、await输出类型题
async function async1(){
console.log('async1 start')//2
// 执⾏async2函数的 setTimeout
await async2()
setTimeout(function(){
// 等上⾯执⾏完在执⾏
console.log('setTimeout1')//8
},0)
}
async function async2(){
setTimeout(function(){
console.log('setTimeout2')//7
},0)
}
console.log('script start')//1 //执⾏同步代码
setTimeout(function(){
// 最后执⾏setTimeout
console.log('setTimeout3')//6
},0)
async1()//调⽤
//执⾏先执⾏同步输出2
/
/ 调⽤
// 执⾏异步setTimeout
new Promise(function(r,j){
console.log('Promise1')//3 //按照代码顺序
r()
}).then(function(){
// 等主线任务完成在执⾏
console.log('Promise2')//5
})
console.log('script end')//4
1
.
看到这题时⾸先要明⽩三点
1.同步异步谁先输出
2、Promise async await 基本⽤法
3、setTimeout与promise 谁先输出
1.同步异步谁先输出
⽏庸置疑肯定是同步按照代码先输出
2、Promise async await 基本⽤法
//promise 是⽤于异步编程的解决⽅案主要⽤于异步编程
//可以将异步操作队列话,按照期望的顺序执⾏,返回符合预期的结果
//有三个状态
//1、pending初始状态
/
/2、fulfilled 操作成功
//3、rejected 操作失败
//基本⽤法
new Promise(function(resolve,reject){
//if(成功){
// resolve("成功返回值")
// }else{
//reject("失败返回值")
// }
})
//resolve:在异步成功时调⽤,并将异步操作的结果作为参数传递出去
/
/reject:在异步操作失败时候调⽤,并将异步操作报出的错误作为参数传递出去
//promise常⽤⽅法 promise.then() then()⽅法会返回⼀个新的Promise实例
// promise.catch() 捕捉错误信息
//promise.all([a]) *** 将⼀个数组作为参数,数组中的每⼀个元素都是⼀个promise对象
//当所有⼦promise完成后,该promise完成,返回值时全部值的数组,有⼀个失败则
//promise失败,返回值时第⼀个失败的⼦promise
//promise.race() 类似于promise.all 区别时他有任意⼀个完成就是完成,返回的是
//第⼀个完成的promise
async:声明异步函数当⼀个函数⾥⾯有异步操作的时候可以使⽤async声明
await:后⾯的语句可以是promise对象、数字、字符串等
async:函数返回的是⼀个Promsie对象
await和async使用方法
await语句后的Promise对象变成reject状态时,那么整个async函数会中断,后⾯的程序不会继续执⾏该promise的reosolve值就是函数return的值。就可以使⽤await接受避免链式复杂
3、setTimeout与promise 谁先输出
顺序script(主程序代码)——>promise——>setTimeout
setTimeout(function(){console.log(11)},0);//1
new Promise(function(resolve,reject){
console.log(21);//1
setTimeout(function(){resolve()},1)
//等resolve执⾏完之后才会执⾏then如果不加定时器就会发现是then先输出
}).then(function(){console.log(31)//3
}).then(function(){console.log(41)});//4
console.log(61);//2
正式进⼊这道题
⾸先1、同步先输出 所以按照代码顺序console.log(‘script start’)
然后看见函数调⽤async1()
同步顺序
发现这个函数也是同步所以⾥⾯的console.log('async1 start') 第⼆个输出发现了await async2() 进⼊ async2在这个函数发现没有同步代码
然后继续发现了promise 是同步所以console.log('Promise1')
发现then是异步所以继续向下看看到底部 console.log('script end')
异步操作对⽐
promise.then()先于定时器所以 console.log('Promise2')
然后定时器按照顺序执⾏
console.log('setTimeout3')
因为async1函数中的await原因所以进⼊async2所以定时器中
所以console.log('setTimeout2')//7
然后在回到async1中执⾏ console.log('setTimeout1')//8
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论