async函数

104 阅读1分钟

作用

在js中可以通过async关键字来快速的创建异步函数

特点

  • async声明的异步函数, 它的返回值会自动包装为Promise
const promise = new Promise((resolve, reject) => {
    //
    resolve(10)
}).then(value => {
    console.log(value); // 返回的是 10
})

等同于

async function demo() {
    return 10
}

demo().then(console.log) // 返回的也是10

console.log(demo()); // 返回的是一个Promise对象
  • async声明的异步函数中可以使用await来调用

await

  • 调用异步函数时, 可以直接在函数前使用await关键字来对其进行调用

    调用awiait, 它会等待Promise执行出结果后将结果返回, 可以通过变量来接收结果
    
    async function demo() {
        return 10
    }

    async function demo2() {
        let num = await demo()
        console.log(num);// 10
    }
    demo2()
      
  注意: await并不是将异步函数改为同步函数, 只是改变了异步函数的调用方式
  
      1.所以await不是说在哪里都能用的!
    async function demo() {
        return 10
    }

    async function demo1(num) {
        return num + 10
    }

    (async function text() {
        let num = await demo()
        num = await demo1(num) 
        console.log(num);
    })()

    console.log('我不会造成阻塞'); // 先执行这一段代码

image.png

      2.当我们使用了await .catch方法就不能调用了, 只能通过try-catch来处理可能的异常
      
    async function demo() {
        return 10
    }

    async function demo1(num) {
        return num + 10
    }

    (async function text() {
        try {
            let num = await demo()
            num = await demo1(num)
            console.log(num);
        } catch (error) {
            console.log(error);
        }
    })()
  • await使用的位置

        1. async声明的异步函数中
    
        2. 可以在模块的外层作用域中使用await
    
        可以在函数最外层里面直接暴露出去, 在外部可以访问的到这个函数, 前提是要把script设置成module类型