asyn和await的简单介绍和使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			// async是一个修饰符,它作为一个关键字放到函数前面 ; async 定义的函数会默认的返回一个Promise对象resolve的值;
			// 因此对async函数可以直接进行then操作, 返回的值即为then方法的传入函数
			async function example() {
				return 'this is an example';
			}
			example().then(msg => {
				console.log(`msg是${msg}`);
				// 将会输出 msg是this is an example
			})

			async function example2() {
				for (let index = 0; index < 3; index++) {
					console.log(index);
				}
			}
			console.log(example2());
			console.log('结束')
			// 结果如下
			// 0
			// 1
			// 2
			// Promise {<resolved>: undefined}
			// 结束
			// 根据结果可以看到, 如果async 函数执行完,返回的promise 没有注册回调函数,和普通函数执行没有区别,只不过在执行结束会返回一个promise 对象

			//  await 关键字只能放到async 函数里面,await是等待的意思;它等待的是promise 对象的执行完毕,并返回结果
			function test() {
				return new Promise((resolve, reject) => {
					setTimeout(function() {
						resolve(`2秒时间到,开始执行`)
					}, 2000);
				})
			}
			async function example3() {
				let test_msg = await test();
				console.log(`test_msg:${test_msg}`);
			}
			example3().then(msg => {
				console.log(`msg : ${msg}`);

			}).catch(err => {
				console.log(`err : ${err}`);

			})

			// 打印结果 (2秒后输出如下结果)
			// test_msg:2秒时间到,开始执行
            // msg : undefined
			// await 我们知道是等待的意思,当看到await,代码会暂停到这里,不再向下执行,它等待后面的promise对象执行完毕,然后拿到promise resolve 的值并进行返回,返回值拿到之后,它继续向下执行。
			// 例如上面的而例子,等待test()执行完毕,2秒后执行结束了,拿到了promise resolve 了,返回值"2秒时间到,开始执行";此时代码开始继续往下;
			
			
			// 这里强调一下await等待,当js等待promise resolve 的时候,它并没有真正的暂停工作,它仍然会处理其它的一些事情,如果我们在example3函数的调用后面加上console.log ,我们就会发现后面console.log的代码先执行。
			
			console.log(`我比example3还要先执行哦`);
			// ok,现在我们看下下面的例子
			function test1() {
				return new Promise((resolve, reject) => {
					setTimeout(() => {
						resolve('test1')
					}, 5000)
				})
			}

			function test2() {
				return new Promise((resolve, reject) => {
					setTimeout(() => {
						resolve('test2')
					}, 5000)
				})
			}

			function test3() {
				return new Promise((resolve, reject) => {
					setTimeout(() => {
						resolve('test3')
					}, 5000)
				})
			}
			async function run() {
				const first = await this.test1();
				console.log(first) ;
				const second = await this.test2();
				console.log(second) ;
				const third = await this.test3();
				console.log(third) ;
			}
			run();
			//  5s后输出test1
			// 10s后输出test2
			// 15s后输出test3
		</script>
	</body>
</html>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xvzhengyang

感谢,励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值