async/await的基础使用

171 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

之前没怎么了解过async/await,今天学习了一下,做个笔记

介绍

介绍一下async/await的使用方式

  1. async定义一个异步函数,返回的是一个promise对象
  2. await后跟一个promise对象,只有状态位 resolve时才会执行后续操作
  3. 两者必须在同一个函数内使用,不然会报错

成功的promise对象

定义一个函数,返回promise对象,让他在5s后执行,我们尝试使用await中断异步执行,等到promise执行结束后,再去执行后续代码

function timer() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(100)
        }, 5000)
    })
}
async function demo() {
    console.log(Date.now());
    let x = await timer()
    console.log(x, Date.now());
}
demo()

定义一个函数timer,返回promise对象,5s后状态改为成功的promise对象,然后在demo函数内被await识别状态改变成resolve,再去还行下面代码,输出x的值

异步执行.png

失败的promise对象

如果返回的是reject的promise对象,那么就会报错

失败的报错.png

我们可以用catch接收失败的peomise对象

function timer() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            reject(100)
        }, 5000)
    })
}
async function demo() {
    console.log(Date.now());
    let x = await timer()
    console.log(x, Date.now());
}
demo().catch((err) => {
    console.log(err);
})

因为async会自动创建一个promise对象,所以在demo执行后我们可以用catch接收失败的promise对象,

接收失败的peomise对象.png

promise的all方法

如果我们有好几个不关联的异步执行的promise函数,我们可以使用promise.all方法接收执行结果,效率比正常执行要快很多,我们来试一下

function test1() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log("test1", Date.now());
            resolve()
​
        }, 3000)
    })
}
function test2() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve()
            console.log("test2", Date.now());
        }, 4000)
    })
}
async function demo() {
    console.log(Date.now()); //程序开始时间
    // await test1()
    // await test2()
    //await Promise.all([test1(), test2()])
}
demo()

分别定义test1,test2两个函数,在demo中正常引用,和使用promise.all方法使用,

先使用同步

async function demo() {
    console.log(Date.now()); //程序开始时间
    await test1()
    await test2()
}

同步执行.png

在使用异步

async function demo() {
    console.log(Date.now()); //程序开始时间
    await Promise.all([test1(), test2()])
}

all执行.png

两个方法对比可以看到,在同步执行时大概需要7s的时间,而promise.all则只需要4s

结束

就打这里吧,大家要开心哦

\