第九讲_JavaScript的async和await

本文详细介绍了JavaScript中的async函数,包括其基本使用方法,以及async/await与Promise的对比。async函数允许以更简洁的方式处理异步操作,通过await关键字实现暂停和恢复进程。
摘要由CSDN通过智能技术生成

1. async函数

async 函数是使用async关键字声明的函数。async 函数一定会返回一个 promise 对象。

await关键字只在 async 函数内有效,await 表达式会暂停整个 async 函数的执行进程并出让其控制权,只有当其等待的基于 promise 的异步操作被兑现或被拒绝之后才会恢复进程。

asyncawait 关键字可以用一种更简洁的方式写出基于 Promise 的异步行为,而无需刻意地链式调用 promise

使用 async/await 关键字就可以在异步代码中使用普通的 try/catch 代码块。

2. 基本使用

// 声明一个异步函数
async function test() {
    try {
        // 等待执行结果
        await new Promise( (resolve, reject) => {
            // 进行异步操作
            setTimeout( () => {
                let num = Math.ceil(Math.random() * 20);
                if (num > 10) {
                    resolve(`${num} > 10,执行成功!`);
                } else {
                    reject(`${num} <= 10,执行失败!`);
                }

            },1000 );
        } );

        // 等待执行结果
        await new Promise( (resolve, reject) => {
            // 进行异步操作
            setTimeout( () => {
                let num = Math.ceil(Math.random() * 20);
                if (num > 10) {
                    resolve(`${num} > 10,执行成功!`);
                } else {
                    reject(`${num} <= 10,执行失败!`);
                }

            },1000 );
        } );
    } catch (err) {
        // 只要有一个Promise的状态从pendding->rejected,就会走catch
        console.log(err)
    }
}

3. async/await与Promise对比

3.1 不含await

async function test() {
  return 1;
}

等价于

function test() {
  return Promise.resolve(1);
}

async 函数一定会返回一个 promise 对象。如果一个 async 函数的返回值看起来不是 promise,那么它将会被隐式地包装在一个 promise 中。

3.2 含await

async function test() {
  await 1;
}

等价于

function test() {
  return Promise.resolve(1).then(() => undefined);
}
  • async 函数的函数体可以被看作是由 0 个或者多个 await 表达式分割开来的。从第一行代码直到第一个 await 表达式都是同步运行的。
  • 一个不含 await 表达式的 async 函数是会同步运行的。然而,如果函数体内有一个 await 表达式,async 函数就一定会异步执行。
  • await 表达式之后的代码可以被认为是存在在链式调用的 then 回调中,多个 await 表达式都将加入链式调用的 then 回调中,返回值将作为最后一个 then 回调的返回值。
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值