async和await其实就是用同步方式解决异步操作
async声明function是一个异步函数,返回一个promise对象,可以使用then方法添加回调函数
javascipt传统实现异步的方式:
- 回调函数。比如:setTimeout让一个函数在指定时间后才执行
setTimeout(() => {
console.log('666')
},1000)
但是这种方式也有缺点:如果我们想要依次执行多个异步操作,当第一个任务执行完毕之后,再执行第二个任务。。。。这样代码就会被写成:
setTimeout(() => {
console.log('等一秒')
setTimeout(() => {
console.log('再等一秒')
setTimeout(() => {
console.log('又等一秒')
},1000)
},1000)
},1000)
代码会一层一层嵌套进去,可读性会越来越差,这也就是函数的回调地狱,为解决这个问题,promise出现了
- promise 调用then方法,并传递一个回调函数。如果请求成功完成,那么回调函数就会被调用,请求的结果也会以参数的形式传递进来。如果单单这个其实和回调函数没有什么区别。
this.$axios.get('http://...')
.then((res) => {
console.log(res)
})
promise的优点在于它可以用一种链式结构将多个异步操作串联起来
this.$axios.get('http://...')
.then((res) => {
console.log(res)
return 1+1
})
.then((res) => {consloe.log(res)}) // 2
基于promise的语法糖async和await,首先通过async将函数声明为异步函数,异步函数就是指返回值是一个promise对象的函数.
await 操作符只能在异步函数 async 定义的函数内部使用。await会等待promise完成之后直接返回最终结果
aynsc function () {
let demo = await this.$axios.get('http://...')
console.log(demo)
}