js解决异步方式

197 阅读1分钟

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)
}