前端经典面试题之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语句后的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
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值