async和await的使用

async和await是promise的一种语法糖,也就是更简单易懂的写法。

在很多项目中,你会经常看到async和await的配合使用,看到原始的promise写法反而不多,就是因为async-await这种写法是用同步的语法去实现异步的逻辑。

基础使用

原生promise写法

javascript 复制代码
        let value = null
        let proFn = new Promise((resolve,reject)=>{
            setTimeout(()=>{
              resolve('成功的值')
            },2000)
        })
        proFn.then(res=>{
            value = res
            console.log(value,'异步返回值')
            //...value获取到了值,可以处理后续的业务逻辑
        })

async和await的写法

javascript 复制代码
        let proFn = ()=>{
            return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('成功的值')
            }, 2000)
        })
        } 
        async function getVal(){
            let value = await proFn() //这条语句执行完毕,后续的代码都需要等value获取到了promise返回的值,才会开始去执行
            console.log(value,'获取到了值')
            //...可以执行后续的业务
        }
        getVal()

两者执行结果都是一样的

async

作用

async需要在函数上使用,本质是Generator 函数的语法糖。

一旦某个函数使用了async,那么这个函数的返回值就会被包装成一个promise函数

javascript 复制代码
        let fn = async function(){
            return '函数返回值'
        }
        console.log(fn(),'调用fn函数')
        fn().then(res=>{
            console.log(res,'获取值')
        })

语法

async写在函数定义的时候,可以有如下写法

javascript 复制代码
        let fn1 = async function(){
            return '普通函数1'
        }
        async function fn2(){
            return '普通函数2'
        }
        async ()=> '箭头函数'
        class Fn{
            constructor(){

            }
            async fn(){
                return '类中的方法'
            }
        }

await

使用条件

await是不可以单独去使用的,是需要和async函数去配合使用的

javascript 复制代码
        let pro = function(){
            return new Promise(res=>{
                res('成功的值')
            })
        }
        let value = await pro()

参数类型

await命令后面可以绑定两种类型的参数,一种是常规类型,一种是promise类型

javascript 复制代码
        let pro = async function(){
            let value = await '常规值'
            console.log(value,'await返回常规值')
        }
        pro()
javascript 复制代码
        let pro = async function(){
            let value = await new Promise(res=>{
                setTimeout(()=>{
                    res('promise执行成功的值')
                },3000)
                
            })
            console.log(value,'await绑定promise实例')
        }
        pro()

处理错误

async-await在处理错误时,可以使用try catch语法配合

javascript 复制代码
        async function pro(){
            try{
               let value =  await new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    // resolve('成功')
                    reject('失败')
                },3000)
            })
            return value
        
            }catch(error){
              console.log(error,'进入catch')
              return error
            }

        }
        pro().then(res=>{
            console.log(res,'执行完毕')
        }).catch(error=>{
            console.log(error,'报错回调')
        })
相关推荐
Bruce_Liuxiaowei24 分钟前
前端校验登录态,等于没校验——一次应急广播终端高危漏洞的发现与报送
运维·前端·安全
Meta Luo30 分钟前
AI 时代,Web 自动化测试该怎么做?
前端·人工智能·playwright 替代工具·无代码自动化测试工具·低代码 ui 自动化测试·web 回归测试工具
去伪存真32 分钟前
AI Agent 性能评估指标与自动化测试落地方案
前端·agent
MaAidan1 小时前
用 Agent 排查线上问题:SLS 日志分析 + DB/Redis 数据验证,一条链路搞清楚
前端·bootstrap·html
墨林陌1 小时前
AI 热点日报(2026-11-03):美团发布 1.6 万亿参数国产大模型,四大厂商共推 AI 训练退出标准
前端
Moment1 小时前
DeepSeek 发布新模型,直接把 Agent 联网搜索的门槛打下来了!
前端·后端
AI宇宙狂想家1 小时前
开源 AI 视频工具进化史:从难用到好用,OpenMontage 改了什么
开发语言·前端·人工智能·开源·ai创业·openmontage
Sailing2 小时前
🚀🚀【封闭结束7】Agent 为什么总是“失忆”?从长期记忆到上下文工程的生产实践
前端·人工智能·agent
OpenTiny社区2 小时前
AI 生成的 Vue 代码,终于能直接用了!
前端·vue.js·github
Ramble_Naylor2 小时前
Rust深度解读:高性能 Web 网关与 Axum 架构剖析
前端·架构·rust