详细分析async/await的基本知识以及用法(附Demo)

85 篇文章 9 订阅
订阅专栏

前言

原先在小程序的时候用过这个用法,知识点差不过,推荐阅读: 详细分析Js中的Promise.all基本知识(附Demo)

以下文章针对Vue3知识,但该知识和JS差不多用法

1. 基本知识

async 函数是指使用 async 关键字声明的函数,当函数被声明为 async 时,会返回一个 Promise 对象,无论该函数内部是否有异步操作

async function fetchData() {
    // 异步操作
    return await someAsyncOperation();
}

await 只能在 async 函数内部使用,它可以暂停 async 函数的执行,等待 Promise 对象的解决

async function fetchData() {
    let result = await someAsyncOperation();
    console.log(result);
}

主要的功能有如下:

  • 简化异步代码:使得异步代码的编写更加直观和类似于同步代码,避免回调地狱
  • 提高可读性:代码结构更清晰,易于理解和维护
  • 处理异步错误:通过 try/catch 结构来捕获 await 中抛出的异常

2. Demo

2.1 单异步

async function fetchData() {
    try {
        let result = await axios.get('https://api.example.com/data');
        return result.data;
    } catch (error) {
        console.error('Error fetching data:', error);
        return null;
    }
}

2.2 多异步

async function fetchUserDataAndPosts(userId) {
    try {
        let userData = await axios.get(`https://api.example.com/user/${userId}`);
        let userPosts = await axios.get(`https://api.example.com/user/${userId}/posts`);
        return { userData: userData.data, userPosts: userPosts.data };
    } catch (error) {
        console.error('Error fetching user data or posts:', error);
        return null;
    }
}

2.3 配合钩子

export default {
    async created() {
        try {
            this.userData = await this.fetchUserData();
        } catch (error) {
            console.error('Error fetching user data:', error);
        }
    },
    methods: {
        async fetchUserData() {
            let userId = this.$route.params.userId;
            let response = await axios.get(`https://api.example.com/user/${userId}`);
            return response.data;
        }
    }
}

2.4 差异

上述都是采用Promise对象,如果非采用非Promise对象,具体的延迟操作如下:使用setTimeout来模拟一个非Promise的异步操作

export default {
    async created() {
        try {
            // 使用setTimeout模拟一个非Promise的异步操作
            let result = await new Promise(resolve => {
                setTimeout(() => {
                    resolve('Delayed operation completed');
                }, 2000);
            });
            // 获取到延迟操作的结果
            console.log(result);
        } catch (error) {
            console.error('Error:', error);
        }
    }
}

3. 实战

实战截图如下:
在这里插入图片描述

对应抽取的Demo如下:

对应的单个异步如下:

  • resetForm函数是一个异步函数,使用了async/await
  • 目的是重置表单,其中的异步操作可能是清除上传文件或重置表单的状态
const resetForm = async (): Promise<void> => {
  // 重置上传状态和文件
  formLoading.value = false
  uploadRef.value?.clearFiles()
}

多异步如下:

  • 两个异步函数getSaleSummary和getPurchaseSummary,分别用于获取销售统计和采购统计
  • 使用Promise.all来同时等待这两个异步函数的结果
const getSaleSummary = async () => {
  saleSummary.value = await SaleStatisticsApi.getSaleSummary()
  saleTimeSummaryList.value = await SaleStatisticsApi.getSaleTimeSummary()
}

const getPurchaseSummary = async () => {
  purchaseSummary.value = await PurchaseStatisticsApi.getPurchaseSummary()
  purchaseTimeSummaryList.value = await PurchaseStatisticsApi.getPurchaseTimeSummary()
}

onMounted(async () => {
  loading.value = true
  await Promise.all([getSaleSummary(), getPurchaseSummary()])
  loading.value = false
})
异步Promise及Async/Await详解
qq_15859173的博客
12-21 764
一、为什么有Async/Await? 我们都知道已经有了Promise的解决方案了,为什么还要ES7提出新的Async/Await标准呢? 答案其实也显而易见:Promise虽然跳出了异步嵌套的怪圈,用链式表达更加清晰,但是我们也发现如果有大量的异步请求的时候,流程复杂的情况下,会发现充满了屏幕的then,看起来非常吃力,而ES7的Async/Await的出现就是为了解决这种复杂的情况。 首先,我们必须了解Promise。 二、Promise简介 2.1 Promise实例 什么是Promise,很多人应该
C# 异步Async/await
窝。。。
05-16 1854
该文章仅为个人理解,如有错误请指正,标红内容为重点,会有针对异步的多个文章,包含Task,APM(BeginInvoke,EndInvoke)等。 一、基本概念: Async/await 关键字是在.Net 4.5引入的关键字来创建自动延续任务实现异步调用。 async/await是语法糖,等价于task.Run().ContinueWith(action,Task.FromCurrentS...
async/await异步处理demo
06-27
async/await异步处理
async/await demo
qq_35410544的博客
03-17 168
<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width,initial-scale=1.0"> <title>Docum...
async 和 awaitdemo
王扬扬的博客
12-03 160
阮一峰老师的博客:http://www.ruanyifeng.com/blog/2015/05/async.html 菜鸟教程:https://www.runoob.com/w3cnote/es6-async.html 我们需要把第一个promise返回的结果,用在第二个promise里面: 常规写法: /** * 常规写法 */ function getData1(num) { return new Promise(r=>{
async/await异步Demo
weixin_45381269的博客
12-08 127
static void Main(string[] args) { Show();//异步 var msg = TestOutRef(); Console.WriteLine(msg); } public static async void Show() { await Task.Run(() => { for (int i = 0; i < 100; i++) ..
promise async/await 顺序执行异步操作
paidaboluo的博客
08-02 764
promise async/await 顺序执行异步操作 简单封装ajax 解决回调地狱
JavaScript 使用 async/await
stanwuc的博客
01-17 248
简单介绍 async 用来申明一个异步的方法,await 只能在异步方法里面使用,这二者是配套的 async修饰的方法调用的时候里面的代码会立即执行直到遇到 await 就会先返回,等到异步操作执行完成,再接着执行函数体内后面的语句 简单来说就是:async函数调用不会造成代码的阻塞,但是await会引起async函数内部代码的阻塞 一、示例 async function func() { ...
快速学习 async await 的使用, Demo 解析
a_靖的博客
07-08 2945
async 和 await 字面都很好理解,分别是异步和等待。 先上个demo,代码解析: 定义一个 函数timeout(异步阻塞 ms 毫秒,模拟异步操作) 定义一个 函数 TextFc (里面用到了 async 和 await),async 申明该函数可以异步处理,await 代码执行阻塞,等待后面的异步操作完成后,再走下面的代码。 /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { function t..
详细分析python中的 async 和 awaitDemo
码农研究僧的博客
02-07 1万+
在Python中,`async`和`await`是用于异步编程的关键字,引入了异步/协程(coroutine)的概念 异步编程是一种处理并发任务的方式,使得程序能够在等待某些I/O操作(如文件读写、网络请求等)的同时继续执行其他任务,而不会发生阻塞 - **异步Asynchronous)**:在异步编程中,程序不会等待某些I/O操作完成,而是继续执行其他任务,待操作完成后再回来处理结果 - **协程(Coroutine)**:协程是一种轻量级的线程,它可以在执行过程中暂停并让出控制权
理解异步函数async和await用法
热门推荐
铁锤妹妹的博客
03-23 9万+
async作为一个关键字放在函数前面,表示该函数是一个异步函数,异步函数意味着该函数的执行不会阻塞后面代码的执行;而 await 用于等待一个异步方法执行完成
ES6模块化、Promise、async、await、EventLoop、API接口案例_export function 与 await
2401_85124329的博客
06-10 727
node -vpackage.json配置"type": "module"这样就可使用ES6规范了。
NodeJs:async/await的使用小demo,以及注意事项
陈十七的博客
01-24 491
async、await的一个使用小示例,希望对你有所帮助。 首先,await 需要与async搭配使用; 其次,await需要等待包含promise对象的函数;否则则不能同步进行; 最后,ajax请求中包含async属性,默认为ture,表示为异步;false,为同步。建议使用异步,便于优化。 //准备1 function prepare(obj) { return new Promise((re...
async await promise的最简单用法-与剖析
yuan_618859的博客
01-17 574
async await promise 用法例子 async function a(){ console.log('-函数a开始执行-') await b() console.log('-函数a结束-') } function b(){ return new Promise((resolve,reject)=>{ console.log('-...
async/await基本理解及项目案例(结合Promise)
xiasohuai的博客
10-15 1万+
ES2017 标准引入了 async 函数,使得异步操作变得更加方便。 1.async/await场景 这是一个用同步的思维来解决异步问题的方案,当前端接口调用需要等到接口返回值以后渲染页面时。 2.名词解释 async async用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行,asy...
浅谈Async/Await
大转转FE
12-15 690
概要在很长一段时间里面,FE们不得不依靠回调来处理异步代码。使用回调的结果是,代码变得很纠结,不便于理解与维护,值得庆幸的是Promise带来了.then(),让代码变得井然有序,便于管理。于是我们大量使用,代替了原来的回调方式。但是不存在一种方法可以让当前的执行流程阻塞直到promise完成。JS里面,我们无法直接原地等promise完成,唯一可以用于提前计划promise完成后的执行逻辑的方式
export async/await 的实践
小猿猪哥的博客
12-24 1万+
之前在使用axios的时候都是封装成async/await的形式去调用, 《react axios的使用 封装async/await》 《vue 开发axios的封装async/await》。 下面的代码和上面的息息相关。 需求 现在遇见这个一个问题,就是有一个接口需要在很多和页面调用,涉及到多人开发,不可能每个人的页面都去写一次,那么这里就需要再次的封装一下了。 封装 新建一个testRequ...
OpenHarmony开发者文档
最新发布
10-23
OpenHarmony开发者文档.此仓库存放OpenHarmony网站提供的设备开发、应用开发对应的开发者文档。
vue2 onload 使用async 和await
09-28
Vue2中,可以使用async和await实现onLoad的同步请求。通过在methods中定义一个异步函数,然后在onLoad中调用该函数,即可实现同步请求。具体代码如下: ```javascript onLoad() { this.myDemo() }, methods: { async myDemo(){ let _demo = demo(); let demoRes = await _demo; console.log(demoRes); } } ``` 在这个例子中,通过引入demo方法并调用该方法,使用await关键字来等待异步请求的返回结果,从而实现了同步请求。
写文章

热门文章

  • npm配置安装最新淘宝镜像,旧镜像会errror 130313
  • 出现 Tomcat:HTTP状态 404 - 未找到解决方法(图文分析) 121737
  • SpringBoot从入门到精通(全) 69053
  • YOLOv5网络模型的结构原理讲解(全) 68710
  • Bootstrap从入门到精通(全) 64876

分类专栏

  • 🧠框架 付费 51篇
  • 配置 付费 72篇
  • BUG 付费 304篇
  • Java 189篇
  • Python 69篇
  • 前端/小程序 85篇
  • 数据库 72篇
  • 运维(Linux/Window) 47篇
  • 深度学习 28篇
  • 逆向爬虫 2篇
  • 网络安全 1篇
  • 数据分析 3篇
  • 项目实战 22篇
  • 架构 5篇
  • 八股文 21篇
  • 算法 129篇
  • 408专业 24篇
  • 书籍笔记 4篇
  • 软考 9篇
  • 推广合作 21篇

最新评论

  • 模型训练 出现NaN的原因以及解决方法

    码农研究僧: 对应解决方式一个个排查下吧,加油

  • 模型训练 出现NaN的原因以及解决方法

    m0_46427732: 我的数据本身没有问题,经过linear层之后,输出全成了nan表情包表情包表情包

  • 详细分析Python链接Oracle的多种方式(附Demo)

    码农研究僧: 不是很明白,这两个不是不一样的库么。主要是instantclient_21_10这个配置要有,不然无法访问

  • 详细分析Python链接Oracle的多种方式(附Demo)

    kyolove: SQLAlchemy 这个需要依赖cx_oracle吗?我一直没配置上

  • idea:新建目录没有create new servlet解决办法(万能)

    码农研究僧: 毕竟实战中的Bug,感谢支持表情包

最新文章

  • 自定义中文排序在Java中的实现与注意事项
  • 出现 master -> master (non-fast-forward) error: failed to push some ref 解决方法
  • Java 分页实战详解
2024
10月 40篇
09月 50篇
08月 54篇
07月 55篇
06月 51篇
05月 54篇
04月 52篇
03月 52篇
02月 40篇
01月 55篇
2023年96篇
2022年210篇
2021年328篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家大兴区商场美陈效果图江苏玻璃钢雕塑摆件有哪些四川创意玻璃钢雕塑哪家便宜商场美陈工艺肇庆户外景观玻璃钢雕塑佛山玻璃钢人像雕塑涞源玻璃钢雕塑公司云南玻璃钢雕塑产品厂家咨询工业玻璃钢花盆报价中卫玻璃钢景观雕塑费用玻璃钢人物学校镂空雕塑定制玻璃钢雕塑转印技术武汉玻璃钢艺术雕塑贵阳商场美陈造型舟山玻璃钢陶瓷雕塑图片玻璃钢广场雕塑设计公司北京通道商场美陈费用定制景观小品玻璃钢鹤雕塑摆件玻璃钢雕塑过程图片广东玻璃钢雕塑定制普洱市玻璃钢雕塑厂家电话玻璃钢雕塑大圣河南批发玻璃钢雕塑询问报价普陀区玻璃钢雕塑仿古玻璃钢景观雕塑定制厂家长治玻璃钢海豚雕塑楚雄市玻璃钢雕塑供应延安公园玻璃钢雕塑玻璃钢卡通公仔雕塑厂金昌彩色玻璃钢雕塑哪家好香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化