当前位置: 首页 > news >正文

for循环中异步请求问题:循环里面使用异步函数,如何等所有的异步函数都执行完再进行下一步

场景是这样的:

在一个列表循环里,对数据进行赋值,调用接口,循环外后面的代码需等待所有请求执行完成后再去执行。

1. Promise.all实现

Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且只返回一个Promise实例,那个输入的所有 promise 的 resolve 回调的结果是一个数组。这个Promise的 resolve 回调执行是在所有输入的 promise 的 resolve 回调都结束,或者输入的 iterable 里没有 promise 了的时候。它的 reject 回调执行是,只要任何一个输入的 promise 的 reject 回调执行或者输入不合法的 promise 就会立即抛出错误,并且 reject 的是第一个抛出的错误信息。

伪代码如下
const pro = []
//一个列表循环
this.EarDataGrid.instance.getSelectedRowsData().forEach((item, index) => {// 取需要的数据const { BatchID, BatchName} = itemlet empty = {};empty['BatchID'] = BatchID //同步代码修改empty['BatchName'] = BatchName// 根据BatchID去请求xx接口,将请求合并用all请求pro.push(new Promise((res, rej) => {this.odataContext.bizBatchSetExpand.byKey(BatchID).then(r => {res(r[0])})}))}});//根据刚刚push的all请求
Promise.all(pro).then((res) => {//在这就可以等所有的返回结果可以得到// do some thing...})

2. for await…of实现(推荐)

这种方法是es6新语法,其介绍如下:

for await…of 语句创建一个循环,该循环遍历异步可迭代对象以及同步可迭代对象,包括:内置的 String, Array,类似数组对象 (例如 arguments 或 NodeList),TypedArray, Map, Set 和用户定义的异步/同步迭代器。它使用对象的每个不同属性的值调用要执行的语句来调用自定义迭代钩子。
类似于 await 运算符一样,该语句只能在一个async function 内部使用。

  • for…of 针对可迭代对象身上的(array, map, set, string, typedarray, argements)
    迭代的是对象列表中的值(value) ,一般情况遍历数组

  • for…in 针对对象的属性进行无序遍历,除了symbol类的属性
    遍历的是属性,一般情况适用于对象遍历

该方法使用起来,相比Promise.all要简洁的多,十分好用

代码示例如下:

/**根据批次调健康管理接口 */
async handleHealthApi() {// 使用for await...of实现处理异步操作for await (let item of this.batchList) {let params = `?$filter=BatchID eq '${item.BatchId}'&$orderby=ImmunityDate`;let { value } = await immtipApi.ImmunityPromptBatch(params)// do some thing...}
},

变量控制

这种方法不推荐,很不推荐,建议优先使用官方推出的语法,这种写法会产生没必要的if,维护起来会越来越麻烦。

list.forEach(function (item, i) {setTimeout(() => {//模拟异步回调中count++;console.log('执行请求ing');//执行完所有异步操作if (count === list.length) {console.log(' 请求执行完成✅',)// do some thing...}}, i)
})

写在最后

觉得有用 点个赞吧

相关文章:

for循环中异步请求问题:循环里面使用异步函数,如何等所有的异步函数都执行完再进行下一步

场景是这样的: 在一个列表循环里,对数据进行赋值,调用接口,循环外后面的代码需等待所有请求执行完成后再去执行。 1. Promise.all实现 Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array&am…...

【iOS-系统框架】

文章目录前言47.熟悉系统框架CoreFoundation框架其他框架要点48. 多用块枚举,少用for循环for循环NSEnumerator遍历快速遍历基于块的遍历方式要点49.对自定义其内存管理语义的collection使用无缝桥接要点50.构建缓存时选用NSCache而非NSDictionaryNSCacheNSCache实例…...

Android APK 签名打包原理分析(二)【Android签名原理】

说到签名,从这个词来理解,正常个人需要签名的时候,一般是用来证明这是某个人的特属认证。 大家是否有印象?还记得我们之前在学习、总结网络相关知识的时候,说到过,客户端和服务端虽然通信数据上,可以采用对称加密和非对称加密组合去进行数据的加密,但是这时还有一个问题…...

linux判断文件不存在退出jenkins编译流程

# linux判断文件不存在退出jenkins编译流程 file"${WORKSPACE}/mc/jenkins_arm64.sh" if [ ! -f "$file" ]; then echo "jenkins_arm64.sh not exist" exit 0 fi dir(charge){checkout([$class: GitSCM, branches: [[name: …...

shell脚本(语法)

一、什么是shell脚本 1.1、shell 的两层含义:既是一种应用程序,又是一种程序设计语言 1.1.1、shell是一种应用程序 交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能称之为 shell 命令解析器。 shell 是…...

java高频面试题(2023最新)

目录一.java基础1.八大基础类型2.java三大特性3.重载和重写的区别4.pubilc、protected、(dafault)不写、private修饰符的作用范围5.和equals的区别6.hashcode()值相同,equals就一定为true7.short s 1;s s 1;(程序1)和 short s 1&#xff…...

视觉感知(二):车位线检测

1. 简介 本期为大家带来车位线检测相关知识点,以及算法工程落地的全流程演示。车位线检测是自动泊车领域必不可缺的一环,顾名思义就是采用环视鱼眼相机对路面上的车位线进行检测,从而识别出车位进行泊车。 较为常规的做法是使用四颗鱼眼相机环视拼接然后在鸟瞰图上做停车位…...

2023.2.10学习记录Docker容器

Docker 必须跑在Linux内核上 镜像是一个轻量级可执行的独立软件包 新建一个docker容器只需要几秒钟 Docker常用命令 启动类命令 镜像命令 容器命令 docker images docker search --limit 5 redis docker pull redis:6.0.8 docker system df 查看镜像/容器/…...

扩散模型diffusion model用于图像恢复任务详细原理 (去雨,去雾等皆可),附实现代码

文章目录1. 去噪扩散概率模型2. 前向扩散3. 反向采样3. 图像条件扩散模型4. 可以考虑改进的点5. 实现代码1. 去噪扩散概率模型 扩散模型是一类生成模型, 和生成对抗网络GAN 、变分自动编码器VAE和标准化流模型NFM等生成网络不同的是, 扩散模型在前向扩散过程中对图像逐步施加噪…...

pytorch

PyTorch基础 import torch torch.__version__ #return 1.13.1cu116基本使用方法 矩阵 x torch.empty(5, 3)tensor([[1.4586e-19, 1.1578e27, 2.0780e-07],[6.0542e22, 7.8675e34, 4.6894e27],[1.6217e-19, 1.4333e-19, 2.7530e12],[7.5338e28, 8.1173e-10, 4.3861e-43],[2.…...

软件测试—对职业生涯发展的一些感想

目录:导读 职场生涯 1、短期规划 2、长期规划 自身定位 1、你在哪儿? 2、你想要什么? 3、你拥有什么? 4、你需要做什么?什么时候做? 5、淡定啊淡定 最近工作不是很忙,有空都是在看书&a…...

5年经验之谈:月薪3000到30000,测试工程师的变“行”记!

自我介绍下,我是一名转IT测试人,我的专业是化学,去化工厂实习才发现这专业的坑人之处,化学试剂害人不浅,有毒,易燃易爆,实验室经常用丙酮,甲醇,四氯化碳,接触…...

全价值链赋能,数字化助力营销价值全力释放 | 爱分析报告

报告编委 张扬 爱分析联合创始人&首席分析师 文鸿伟 爱分析高级分析师 王鹏 爱分析分析师 外部专家(按姓氏拼音排序) 黄洵 客易达 联合创始人 毛健 云徙科技 副总裁 & COO 特别鸣谢(按拼音排序) 报告摘要 在…...

【自学Docker 】Docker search命令

大纲 Docker search命令 docker search命令教程 docker search 命令用于从 Docker Hub 查找镜像。 docker search命令语法 haicoder(www.haicoder.net)# docker search [OPTIONS] TERMdocker search命令参数 参数描述docker search --filter设置过滤条件。docker search -…...

银行零售如何更贴近客户?是时候升级你的客户旅程平台了

随着数字化战略推进,各大银行持续加大对线上多渠道的建设投入,客户触达也愈发移动化、智能化。与此同时,手机银行飞速发展产生并累积了大量客户行为数据,呈多样化、海量化等特点,将在用户体验、客户经营、手机银行运营…...

零入门kubernetes网络实战-12->基于DNAT技术使得外网可以访问本宿主机上veth-pair链接的内部网络

视频地址(稍后上传) 本篇文章测试如何让veth pair链接的内网网络可以被本局域网的其他宿主机访问到? 1、测试环境介绍 一台centos虚拟机 # 查看操作系统版本 cat /etc/centos-release # 内核版本 uname -a uname -r # 查看网卡信息 ip a s eth02、网络拓扑 3、操…...

conda环境管理命令

conda环境管理命令 1.环境检查 1)查看安装了哪些包 conda list 2)查看当前存在哪些虚拟环境 conda env list conda info -e [rootoracledb anaconda3]# conda info -e # conda environments: # base * /home/anaconda33)检查更新当前conda con…...

ubuntu clion从0开始搭建一个风格转换ONNX推理网络 opencv cuda::dnn::net

系统搭建 系统搭建 OpenCV的安装 cmake sudo apt-get install cmake其他环境以来 sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev 不安装会报这个错误 OpenCV(4.6.0) /hom…...

1.十大排序算法

1.什么是排序算法? 在梳理十大排序算法之前,虽然知道排序算法是将数字或字母按增序排列的算法,但该理解过于片面,那排序算法的权威定义是什么呢。 一个排序算法(英语:Sorting algorithm)是一种…...

算法导论—SAT、NP、NPC、NP-Hard问题

算法导论—SAT、NP、NP-Hard、NPC问题SAT 问题基本定义问题复杂性P、NP、NP-Hard、NP-Complete(NPC)证明NP-Hard关系图NP问题的概念约化的定义NPC问题NP-Hard问题SAT 问题基本定义 SAT 问题 (Boolean satisfiability problem, 布尔可满足性问题,SAT): 给…...

Z-Image-Turbo-rinaiqiao-huiyewunv实操手册:gc.collect()与cuda.empty_cache()调用时机分析

Z-Image-Turbo-rinaiqiao-huiyewunv实操手册:gc.collect()与cuda.empty_cache()调用时机分析 1. 引言:从一次生成失败说起 你有没有遇到过这种情况?用AI画图工具,第一次生成效果惊艳,第二次、第三次也还行&#xff0…...

Nanbeige4.1-3B技术报告精读:23T高质量数据筛选策略与偏好对齐训练方法解析

Nanbeige4.1-3B技术报告精读:23T高质量数据筛选策略与偏好对齐训练方法解析 如果你正在寻找一个在推理、代码生成和智能体任务上表现突出,但参数量又足够“轻量”的开源模型,那么Nanbeige4.1-3B绝对值得你花时间深入了解。 这个仅有30亿参数…...

新手必看:ClearerVoice-Studio常见问题解决,从安装到使用全流程指南

新手必看:ClearerVoice-Studio常见问题解决,从安装到使用全流程指南 1. 开箱即用,但第一步怎么走?—— 环境与访问避坑指南 很多朋友拿到ClearerVoice-Studio这个工具包,第一反应是“功能看着很强大”,但…...

PyTorch训练时内存爆炸?5个实用技巧帮你稳住GPU显存

PyTorch训练时内存爆炸?5个实用技巧帮你稳住GPU显存 训练深度学习模型时,最令人头疼的问题之一就是GPU显存突然耗尽。那种看着显存占用曲线一路飙升却无能为力的感觉,相信每个PyTorch开发者都深有体会。本文将分享几个经过实战验证的技巧&…...

从泄漏电流到智能预警:避雷器监测数据的5种高级分析方法(Python示例)

从泄漏电流到智能预警:避雷器监测数据的5种高级分析方法(Python示例) 避雷器作为电力系统的"隐形守护者",其健康状态直接影响电网安全。传统的人工巡检和阈值告警已无法满足智能电网的需求——我们需要的不是简单的数据…...

告别Python依赖:纯Java环境部署YOLOv10模型全指南

适配环境:JDK 11+ | YOLOv10 | DJL 0.26.0 / ONNX Runtime 1.19.2 实战价值:彻底告别Python依赖,所有逻辑在JVM内完成,工业级部署零门槛,30分钟跑通YOLOv10目标检测 前言:工业级Java项目,真的不能为了YOLO装个Python “老周,我们的MES系统是纯Java写的,现在要加个YOL…...

如何用dc.js打造震撼可再生能源数据可视化:能源转型分析指南

如何用dc.js打造震撼可再生能源数据可视化:能源转型分析指南 【免费下载链接】dc.js Multi-Dimensional charting built to work natively with crossfilter rendered with d3.js 项目地址: https://gitcode.com/gh_mirrors/dc/dc.js dc.js是一个基于d3.js和…...

固件SBOM生成失败?别再手动grep了!C语言供应链检测终极流程(含LLVM IR解析器+JSON-LD输出引擎)限时开源

第一章:固件SBOM生成失败?别再手动grep了!C语言供应链检测终极流程(含LLVM IR解析器JSON-LD输出引擎)限时开源固件二进制中嵌入的第三方组件常因编译优化、静态链接和符号剥离而“隐身”,传统基于字符串匹配…...

halcon 中gen_gauss_filter 的数学原理与高斯加权

gen_gauss_filter 是 生成高斯滤波器的算子,本质上是利用 高斯函数构造卷积核 来实现图像平滑和降噪一、高斯滤波器定义高斯滤波器是一种线性平滑滤波器,二维形式为二、核生成原理 (gen_gauss_filter)在 HALCON 中,gen_gauss_filter 会生成一…...

异步电机参数解析:从铭牌数据到等效电路的公式法实践

1. 异步电机参数计算的基础知识 异步电机作为工业领域最常见的动力设备之一,其性能分析和系统仿真都离不开准确的等效电路参数。传统上,我们通过空载和堵转实验来获取这些参数,但这种方法存在几个明显的缺陷。首先,堵转实验时转子…...