关于async/await

async/await是什么?

简单来说async/await是Promise的语法糖,async是异步的意思,await是等待的意思。async function 声明一个函数里面可能有异步代码需要执行,await则可以认为是等待一个异步方法执行完成。

async/await的用法

let people = {}
function getPeople1() {
    return new Promise((resolve, reject) => {
    //异步代码
        setTimeout(() => {
            data = { name: '张三', sex:'男' }
            resolve()
        }, 1000)
    })

}
function getPeople2() {
    return new Promise((resolve, reject) => {
    //异步代码
        setTimeout(() => {
            data = { name: 'lily', sex:'女' }
            resolve()
        }, 2000)
    })

}

function showPeople() {
    console.log(`正在展示获取到的数据:${JSON.stringify(people)}`);
}

async function handle() {
    await getPeople1()
    await getPeople2()
    showPeople()
}

handle()

在上面的代码中可以看到getPeople1和getPeople2两个函数中都有异步代码,用async/await来解决的话和在函数体内和使用then链解决一样,都需要return出一个Promise。不同的点就在于async新定义了一个异步函数,getPeople1和getPeople2两个函数在异步函数里面调用,然后在两个函数前面都加上await。

async/await的特点

  • async函数调用会返回一个Promise对象。
async function handle() {
    return 'hi'
}
const res = handle()
console.log(res);

执行结果:
关于async/await_第1张图片

  • await 必须写在 async 函数里面。
    async和await是配套使用的,await规定了要写在 async里面。
  • await 会阻塞下一行代码的执行,封装了Promise.then()。
    需要耗时的代码都是异步代码,await加在了有异步代码的函数前面,一定要等这个函数执行完毕了才会执行下面的代码,要不然就解决不了异步代码挂起的问题了。
  • await也会返回出一个Promise对象。
//await
function await() { 
  return Promise.resolve().then(() => {   
  })
}

async/await的优点——和Promise比较

  • 同步代码编写方式,能处理由多个Promise组成的 then 链,async/await从上到下顺序执行,更符合编写习惯。
  • 同步代码和异步代码可以一起编写,用Promise最好将同步代码和异步代码放在不同的then节点中,结构更加清晰,而用async/await整个书写习惯都是同步的,不需要纠结同步和异步的区别。
  • 语法简洁清晰,节省了很多不必要的匿名函数。
  • 减少不必要的中间变量,更清晰明确的错误堆栈。

你可能感兴趣的:(javascript,前端,开发语言)