Vue.js 学习笔记十四:Promise 之 async/await

目录

async/await


async/await

Promise 实际上是利用编程技巧将回调函数改成链式调用,避免回调地狱。最大问题是代码冗余,原来的任务被 Promise 包装了一下,不管什么操作,一眼看去都是一堆 then,原来的语义变得很不清楚。

为了解决 Promise 的问题,async、await 在 ES7 中被提了出来,是目前为止最好的解决方案。

async/await 基础语法

			// 定义一个异步函数(假设他是一个异步函数)
			function queryData() {
				const data = { code: 200, msg:'hello world' }
				return data			
			}
			// 在需要使用上面异步函数的函数前面,加上async声明,声明这是一个异步函数
			async function testQueryData() {
                 // 在异步函数前面加上 await,函数执行就会等待用await声明的异步函数执行完毕之后,在往下执行
				const data = await queryData()
				return data
			}
			 // 返回一个 Promise 对象
			const result = testQueryData();
			console.log(result)
			

运行后可以看出,async 函数会返回一个Promise对象,如果在函数中 return 一个直接量,async 会把这个直接量通过 Promise.resolve() 封装成 Promise 对象。应该使用原始的方式 then() 链来处理这个Promise对象:

			result.then(res => {
				console.log(res)
			})

使用 async/await 的时候,是无法捕获错误的,这个时候就要用到我们 es5 里面的 try/catch,来进行错误的捕获:

			async function testQueryData() {
				try {
					const data = await queryData()
					return data
				} catch(err) {
					console.error(err)
				}				
			}

async 函数在声明形式上和普通函数没有区别,函数声明式,函数表达式,对象方法,class 方法和箭头函数等都可以声明 async 函数。

任何一个 await 语句后面的 Promise 对象变为 reject 状态,那么整个 async 函数都会中断执行。

async 函数返回的 Promise 对象,必须等到内部所有 await 命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到 return 语句或者抛出错误。也就是说,只有 async 函数内部的异步操作执行完,才会执行 then 方法指定的回调函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

stary1993

你的鼓励是我创作的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值