超详细 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...
Qwen3.5-35B-A3B-AWQ-4bit企业应用:HR招聘简历图识别+关键资质自动核验系统
Qwen3.5-35B-A3B-AWQ-4bit企业应用:HR招聘简历图识别关键资质自动核验系统 1. 企业招聘场景的痛点分析 在传统HR招聘流程中,简历筛选和资质核验是最耗费人力的环节之一。每天面对堆积如山的纸质简历和PDF文件,HR需要: 手动翻阅…...
数据驱动决策的基石:Awesome Public Datasets实用探索手册
数据驱动决策的基石:Awesome Public Datasets实用探索手册 【免费下载链接】awesome-public-datasets A topic-centric list of HQ open datasets. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-public-datasets 在数据驱动决策日益成为商业竞…...
SpringBoot+Hadoop实战:手把手教你搭建民宿数据可视化平台(附完整源码)
SpringBootHadoop实战:构建高可用民宿数据可视化平台 1. 项目背景与技术选型 民宿行业近年来呈现爆发式增长,随之而来的是海量房源信息、用户评价和交易数据的积累。传统的关系型数据库在处理这类数据时面临存储瓶颈和计算性能不足的问题。我们选择Spr…...
Windows Cleaner智能清理工具:系统优化与空间释放的全面解决方案
Windows Cleaner智能清理工具:系统优化与空间释放的全面解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 随着计算机使用时间的增长࿰…...
企业级低代码平台JeecgBoot快速搭建指南:从环境配置到实战应用
企业级低代码平台JeecgBoot快速搭建指南:从环境配置到实战应用 【免费下载链接】jeecg-boot 一款 AI 驱动的低代码平台,提供"零代码"与"代码生成"双模式——零代码模式一句话搭建系统,代码生成模式自动输出前后端代码与建…...
古基因组学:降解DNA的损伤模式、污染评估与群体历史推断
点击 “AladdinEdu,你的AI学习实践工作坊”,注册即送-H卡级别算力,沉浸式云原生集成开发环境,80G大显存多卡并行,按量弹性计费,教育用户更享超低价。 摘要:古基因组学通过对古代生物遗骸中高度降…...
快捷键冲突终结者:Hotkey Detective全方位排障指南
快捷键冲突终结者:Hotkey Detective全方位排障指南 【免费下载链接】hotkey-detective A small program for investigating stolen hotkeys under Windows 8 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 问题诊断:你的快捷键为…...
Bilibili-Evolved性能优化实战:突破60fps流畅播放全解析
Bilibili-Evolved性能优化实战:突破60fps流畅播放全解析 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved Bilibili-Evolved作为强大的哔哩哔哩增强脚本,通过深度优化浏…...
GLM-4.1V-9B-Base部署教程:NVIDIA驱动版本兼容性验证与降级方案
GLM-4.1V-9B-Base部署教程:NVIDIA驱动版本兼容性验证与降级方案 1. 模型概述 GLM-4.1V-9B-Base是智谱开源的一款视觉多模态理解模型,专注于图像内容识别与分析任务。该模型具备以下核心能力: 图片内容描述与场景理解图像主体识别与定位颜色…...
迪文串口屏C51开发避坑指南:从ModBus ASCII模式到音乐播放实战
迪文串口屏C51开发实战:从ModBus ASCII到音乐播放的深度解析 迪文串口屏在工业控制领域占据重要地位,其C51开发环境为开发者提供了高度灵活的定制能力。本文将聚焦三个典型开发场景:ModBus ASCII模式移植、C51变量定义导致的定时问题以及音乐…...
