超详细 async和await 项目实战运用(附加文字解答+源码)
文章目录
- 问题描述
- async
- 什么是 async
- async 的作用
- async 的应用场景
- async 优点
- await
- 什么是 await
- await 的作用
- await 的应用场景
- await 的优点
- async和 await结合使用
- 结束语
大家好!又到了愉快的周末假期,今天是
2023年9月3日|农历七月十九,我最近还是比较忙的,但是觉得每一天过得也比较充实,无论在工作中遇到的技术难点,还是在生活中的点点滴滴。
本篇博文是我发布的第
100篇文章,在上周收获了第一批粉丝(〃‘▽’〃),这次主要是来说一下在项目实战中如何处理异步之间的函数调用,下面以文字解答+源码的方式一一分享给大家。
问题描述
本次异步调用实现方式我是运用到了微信小程序中,我有两个函数,举例说一下:函数A和函数B,函数A去调用数据库返回id,然后函数B拿着这个id再次去查询数据,没使用异步之前我的做法是在
onLoad或onShow中,先调用函数A,在调佣函数B,我发现了一个问题,函数A中id打印出来时null,而且是在调用完函数B之后才打印出来的,这明显不符合我的应用场景,我的应用场景是必须在调用函数B之前把id查询到,因为id是作为函数B查询数据库的查询条件,后来我采用async和await进行解决的,具体解决思路如下:
async
先来简答了解一下async.
什么是 async
async是一个关键字,用于定义
异步函数.
async 的作用
简化异步编程.
async 的应用场景
- 异步操作:当有需要处理异步操作的时候,如异步请求、文件读写等。
- 顺序控制:当需要按照一定的顺序执行多个异步操作时,可以使用await关键字确保异步操作的顺序性,避免回调地狱和复杂的Promise链式调用。
- 错误处理:async/await结合try/catch语句可以更方便地处理异步操作中的错误,使错误处理代码更加清晰和直观。
async 优点
- 简化了异步编程,并提供了更直观、更易于理解和编写的方式来处理异步操作。
- 适用于需要处理异步操作的场景,以及对代码的简洁性、可读性和可维护性有要求的场景下。
await
先来简答了解一下await .
什么是 await
await 是一个操作符,用于
等待一个Promise对象的解决(resolved),并暂停当前异步函数的执行,直到Promise对象被解决并返回解决值。
await 的作用
使异步操作的
代码看起来更像是同步的.
await 的应用场景
使用await时,它会
暂停当前函数的执行,直到等待的Promise对象被解决。一旦Promise对象被解决,await表达式将返回Promise对象的解决值,并继续执行后面的代码。
await 的优点
- 顺序控制:await关键字可以确保
异步操作按照预期的顺序执行。当一个异步操作需要依赖于另一个异步操作的结果时,可以用await等待前一个操作完成,然后进行后续操作。这样可以避免回调地狱和嵌套的.then()方法调用。 - 简化异步代码:await关键字使异步代码更易于理解和编写,尤其是在处理多个异步操作时。它可以使异步代码的结构更加线性,类似于同步代码,从而提高代码的可读性和可维护性。
async和 await结合使用
修改前
onShow():页面加载渲染时,调用此函数.
onShow() {this.loaddata();// 相当于我前面举例说明的函数Athis.getguardfamilyList();// 相当于我前面举例说明的函数B
}
loaddata() 函数,在调用getguardfamilyList()之前我输出来的this.modelvalue.id是undefined,后端是有值的,调用完getguardfamilyList()之后才有值。
loaddata(){get('后端接口地址',{id:uni.getStorageSync('values').id}).then(res=>{this.modelvalue = res.resultconsole.log("this.modelvalue.id==============>",this.modelvalue.id)})
},
我在getguardfamilyList()中输出的modelvalue.id是undefined.
getguardfamilyList() {let modelvalue=this.modelvalueconsole.log("modelvalue.id========>",modelvalue.id)get('后端接口地址',model).then((res) => {if (res.success) {this.shouhuquanjia = res.result}}})
},
修改后
在调用loaddata()的函数中添加async ,将onShow()定义为异步函数.
async onShow() {await this.loaddata();// 相当于我前面举例说明的函数Athis.getguardfamilyList();// 相当于我前面举例说明的函数B
}
在loaddata()函数前面加上async 关键字,定义为异步函数,并在get函数中添加await关键字,表示我在执行get查询数据库时,暂停其它函数执行,直到后端返回结果后,再接着往下执行,我原来的执行逻辑是在loaddata()去请求后端时,结果还没有返回,getguardfamilyList()就已经被执行了.
async loaddata(){await get('后端接口地址',{id:uni.getStorageSync('values').id}).then(res=>{this.modelvalue = res.resultconsole.log("this.modelvalue.id==============>",this.modelvalue.id)})
},
结束语
这就是我遇到的问题及解决方案,希望本篇博文可以解决你遇到的问题,
如果有不明白的博主,或者你也遇到了类似的问题,私信我,我会一一为你进行解答,不收取任何费用,欢迎打扰哦~
相关文章:
超详细 async和await 项目实战运用(附加文字解答+源码)
文章目录 问题描述async什么是 asyncasync 的作用async 的应用场景async 优点 await什么是 awaitawait 的作用await 的应用场景await 的优点async和 await结合使用 结束语 大家好!又到了愉快的周末假期,今天是2023年9月3日|农历七月十九,我最…...
Maven入门教程(三):Maven语法
视频教程:Maven保姆级教程 Maven入门教程(一):安装Maven环境 Maven入门教程(二):idea/Eclipse使用Maven Maven入门教程(三):Maven语法 Maven入门教程(四):Nexus私服 Maven入门教程(五):自定义脚手架 6.Mav…...
C++技术点,故事解析
语言的魅力 从人类诞生开始 ,南方古猿到现代人类经历了非常多变化; 南方古猿到能人 有什么变化? 能人会使用工具,由于会使用工具 就可以获得肉类食物,当然只能吃一些动物腐肉 直到进化成直立人的晚期,在东…...
数据结构(Java实现)-字符串常量池与通配符
字符串常量池 在Java程序中,类似于:1, 2, 3,3.14,“hello”等字面类型的常量经常频繁使用,为了使程序的运行速度更快、更节省内存,Java为8种基本数据类型和String类都提供了常量池。…...
python强化学习--gym安装与使用
最近开始学习强化学习,第一步肯定是要学会安装和使用pym,原本以为很简单,事实上确实很简单,但是遇到一个小问题,就是安装gym之后,在应用的过程中,游戏界面没有显示出来,了解后才知道…...
105. 从前序与中序遍历序列构造二叉树
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 思路:题目给出了先序遍历和中序遍历的结果,因为先序遍历遵循根–>左–>…...
(第六天)初识Spring框架-SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录
SSM框架的学习与应用(Spring Spring MVC MyBatis)-Java EE企业级应用开发学习记录(第六天)初识Spring框架 昨天我们已经把Mybatis框架的基本知识全部学完,内容有Mybatis是一个半自动化的持久层ORM框架,深入学习编写动态SQL&a…...
如何使用『Nginx』配置后端『HTTPS』协议访问
前言 本篇博客主要讲解如何使用 Nginx 部署后端应用接口 SSL 证书,从而实现 HTTPS 协议访问接口(本文使用公网 IP 部署,读者可以自行替换为域名) 申请证书 须知 请在您的云服务平台申请 SSL 证书,一般来说证书期限…...
Git仓库简介
1、工作区、暂存区、仓库 工作区:电脑里能看到的目录。 暂存区:工作区有一个隐藏目录.git,是Git的版本库,Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区…...
TensorRTC++ | INT8量化
Int8量化步骤 // 这是基本需要的组件 auto builder = make_nvshared(nvinfer1::createInferBuilder(logger)); auto config = make_nvshared(builder->createBuilderConfig())...
VS + qt环境使用QCustomPlot等三方库如何配置
文章目录 前言VS环境下引入第三方类库QCustomPlot方法一:解决办法: C中.dll与.lib文件的生成与使用1. 两种库:2.两种文件的区别 前言 Qt提供了显式和隐式导入第三方库方法,本文只介绍显示导入方法。 一般的第三方提供的库文件包…...
OS 段页结合的实际内存管理
虚拟内存承接段和页,从用户角度,虚拟内存提供段,从硬件角度,虚拟内存把段打散映射到页 先基于段的翻译,再基于页的翻译 p是pcb跟着进程换,64M一个段,set base就是建段表 因为每个进程虚拟地址…...
一种改进多旋翼无人机动态仿真的模块化仿真环境研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
02-请解释一下Java的内存模型和happens-before规则?【Java面试题总结】
请解释一下Java的内存模型和happens-before规则? 概念:Java内存模型,简称JMM,是一种定义了多线程程序中内存访问行为的规范。它定义了线程如何与主内存和工作内存进行交互,以及如何保证多线程程序的正确性和可见性。J…...
PVE 8 出现CPU 100% 冻结(卡死)
最近在研究PVE,然后下载官方最新版本系统8.x安装好后出现卡死问题,就连开个软件CPU也能飙到100%,开始我以为是硬件问题可能是资源不够,但是将系统切换回裸机(不用PVE启动)一点问题也没有,后来逐…...
【高效编程技巧】编程菜鸟和编程大佬的差距究竟在哪里?
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《高效编程技巧》《C语言进阶》 ⛺️生活的理想,就是为了理想的生活! 文章目录 📋 前言1.如何写出好的代码?1.2 如何分析一个函数写的怎么样 2. 代码板式的重要性2.1 代码…...
继承【C++】
文章目录 继承的概念继承的定义继承方式和访问限定符继承基类成员访问方式的变化 默认继承方式 基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元静态成员菱形继承及菱形虚拟继承继承的方式 菱形虚拟继承菱形虚拟继承原理 继承的概念 继承(inheritance)…...
ORB-SLAM3复现过程中遇到的问题及解决办法
在复现过程中遇到的问题的解决过程 1. 版本检查1.1 Opencv版本的检测1.2 Eigen版本的检测1.3 查看Python版本1.4 其他 2. 编译过程中遇到的问题及解决办法2.1 ./build.sh遇到的问题2.2 ./build_ros.sh遇到的问题 因为环境比较干净,所以遇到的问题相对少一些…...
vue开发桌面exe应用
vue开发桌面exe应用 Electron-vue 参考 Electron-vue搭建vue全家桶Element UI客户端(一) 如何使用Vue.js构建桌面应用程序...
C# 实现PictureBox从随机选择的文件夹内对图像进行随机播放
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
