JavaScript:async和await

参考博客:https://www.jianshu.com/p/b4fd76c61dc9

两种等待

async中文意思是异步;await中文意思是等待
首先要明白,等待有分2种,一种是干等着,等待的时候不做其他事情;一种是边等边做其他事情。await这种等待是后者。

代码实例

// 以吃饭、睡觉、手机充电、拔电源为例子
function lunch(){
	return new Promise((resolve, reject) => {
		console.log("吃饭ing");
		resolve("吃完饭了");
	})
}

function sleep(){
	return new Promise((resolve, reject) => {
		console.log("睡觉ing");
		resolve("起床");
	})
}

function mobilePhoneCharging(){
	return new Promise((resolve, reject) => {
		console.log("手机充电ing");
		resolve("手机充电完成");
	})
}

function powerOff(){
	console.log("拔电源");
}
  • 没有async/await的版本去执行
function main(){
	// 要先吃饭在睡觉
	lunch().then(res => {
		console.log(res );
		sleep();
	})
	// 但是手机充电不需要先吃饭,可以吃饭前就开始充电
	mobilePhoneCharging().then(res => {
		console.log(res);
		powerOff();
	})
}
// 错误的做法
async function main(){
	let lunchRes = await lunch()
	console.log(lunchRes);
	leep();
	// 这种写法是错误的,因为本来mobilePhoneCharging是不依赖lunch的,现在要等待完lunch执行完才能执行mobilePhoneCharging
	let mobilePhoneChargingRes = await mobilePhoneCharging();
	console.log(mobilePhoneChargingRes );
	powerOff();
}
// 正确的做法
function main(){
	// 因为lunchAndSleep被标记成了一个异步方法
	// 所以lunchAndSleep方法执里执行被阻塞了,不影响外面,外面还是继续走。
	// 也就是main方法边等lunchAndSleep执行完,边做其他事情。
	lunchAndSleep();
	mobilePhoneChargingAndPowerOff();
}

async function lunchAndSleep(){
	// 加了await,那么就要执行完这个方法,才会继续往下走
	// 所以async方法里是同步执行的
	let res = await lunch()
	console.log(res)
	leep();
}

async function mobilePhoneChargingAndPowerOff(){
	let res = await mobilePhoneCharging();
	console.log(res)
	powerOff();
}

语法补充

1.方法里如果想使用await关键字,那么该方法就要被async修饰。因为你想阻塞方法内部,就不能影响外面执行,所以这个方法是要被标记成异步的
2.await methodA(),那么methodA方法返回值就必须要是promise,并且await methodA()是拿promise方法的resolve值

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫985

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值