[ES6] 细化ES6之 -- async函数

本文深入讲解async函数的基础概念与实际应用,包括其作为简化Promise异步调用的工具、与Generator函数的关系,以及如何通过await表达式实现异步操作同步化处理。文中还探讨了错误处理方法及使用注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

async函数是什么

用于简化Promise异步调用的操作

是 Generator 函数的语法糖

async/await类似于组合生成器和Promises

function resloveAfter2Seconds() {
    return new Promise(resolve => {
        setTimeout(()=>{
            resolve('resolved')
        },3000)
    })
}
async function asyncCall() {
    console.log('calling');
    var result = await resloveAfter2Seconds()
    console.log(result);
}
asyncCall()

 

语法结构

异步函数是指通过事件循环异步执行的函数,它会通过一个隐式的Pronise返回其结果。

异步函数声明式

用于定义一个返回Promise 对象的异步函数。

 

异步函数表达式

用于在表达式中定义异步函数。

 

区别:

在于异步函数表达式可以省略函数名称来创建一个匿名函数。

 

返回Promise对象

async 函数返回一个 Promise对象。async,函数内部return语句返回的值,会成为then方法回调函数的参数。

//async函数返回Promise对象
async function myAsync() {
    return "hello world";
}
let promise = myAsync();
// console.log(promise);//Promise { 'hello world' }
promise.then((value) => {
    console.log(value);//hello world
});

return语句中没有 await表达式,因为异步函数的返回值将被隐式地传递Promise.resolve

 

await表达式
await表达式是什么

用于等待一个Promnise 对象,它只能在异步函数异步函数中使用。

function createPromise() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("执行成功");
        }, 200);
    });
}

async function myAsync() {
    console.log("当前异步函数被调用了");
    var result = await createPromise();
    console.log(result);
}

myAsync();

 

错误处理

如果 await后面的异步操作出错,那么等同于async函数返回的Prornise 对象被reject

function createPromise() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            reject("执行成功");
        }, 200);
    });
}

async function myAsync() {
    console.log("当前异步函数被调用");
    try {
        var result = await createPromise();
    } catch (e) {
        console.log("出错了", e);
    }
    console.log(result);
}

myAsync();

 

注意事项
使用try…catch语句

await命令后面的Promise对象,运行结果可能是rejected,所以最好把 await表达式放置在try…catch 代码块中。

 

多个await同时触发

多个await表达式后面的异步操作,如果不存在继发关系,最好让它们同时触发。

 

await表达式的限制

await表达式只能用在 async函数之中,如果用在普通函数,就会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值