VUE\JS处理在循环中异步和同步执行的问题

2024-06-23 01:52

本文主要是介绍VUE\JS处理在循环中异步和同步执行的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

业务场景:

1、有一个组别集合,每一个小组别对象里面有一个数据集合,需要循环去校验每个不同组里的数据(不同组合因为一些特殊属性不能合并到一个组里),全都符合就通过验证,去处理后续业务。
2、现在,在校验规则方法里对一个集合里的每一条数据进行强校验和弱校验,弱校验需要在提升框放入确定的操作按钮,允许通过,再循环到下一条数据的验证。

代码分析

1、涉及到组别集合的循环、组别内部数据的循环,循环套循环
2、this.$confirm的待处理问题,怎么让循环卡住,等待处理后再放行

存在问题:

循环调用校验方法,检验方法在弹出待确定按钮时,循环依旧在往下执行,没有等点击确定后再进行下一个循环,异步问题导致获取不到准确的校验结果。

代码处理:

关键处理:
async … await
for (… of …)
return new Promise((resolve, reject) => {})
const verifyFormData = async (index, fData) => {})

//提交数据
async submit() {//待验证数据为空直接通过if (this.setData.tData?.length > 0) {//需要验证的组let rulesData = this.setData.ruleSetData.filter(t => t.state == '1');if (rulesData.length > 0) {let ok = true;let results= []; // 存储每个数据验证结果的数组for (let item of rulesData) {//调用校验方法let result = await this.takeRulesVerify(item);results.push(result);if (results.length === rulesData.length) {// 最终判断if (results.every((result) => result)) {//数据全都验证通过//执行后续业务}}}}}else{//无数据待验证直接通过//执行后续业务}
},//校验规则方法
async takeRulesVerify(setData) {// start return new Promise((resolve, reject) => {// 使用本表单的校验let num = 0; // 初始化变量num,用于计数通过验证的表单数据const verifyFormData = async (index, fData) => {if (index < fData.length) {// 处理fData校验业务业务 start......let str="xxxxxxx = xxxxxx"// 处理校验业务业务 endif (!eval(str)) {//验证通过num++; // 如果表达式为假,增加num计数// 继续下一个验证规则verifyFormData(index + 1, formData);} else {//验证未通过,需要进入强弱验证机制// 如果表达式为真,显示确认对话框(验证规则 只有真的时候才会触发,比如a>b了)// strengthValue: 0强校验  1弱校验let remark = el.reminder ? el.reminder : '校验不通过'if (settingsData.strengthValue == '0') {this.$confirm(remark, '提示', {customClass: 'costomGenerated',showCancelButton: true,showConfirmButton: false,type: 'warning',confirmButtonClass: 'press_button',cancelButtonClass: 'border_buttom'});} else {this.$confirm(remark + ',是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {// 用户点击确定后,允许这条验证通过num++;// 继续下一个验证规则verifyFormData(index + 1,formData); }).catch((err) => {// 用户点击取消后执行的逻辑// 可以根据需要处理});}}} else {// 当所有循环验证处理完成// 如果num等于验证数据数组的长度,即所有的拦截都通过,执行后续业务if (num == fData.length) {//验证通过,执行后续业务resolve(true)} else {//验证未通过resolve(true)}}};verifyFormData(0, setData.fData);});
},

这篇关于VUE\JS处理在循环中异步和同步执行的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085993

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端或控制台编码问题:如果你在终端或控制台看到乱码,可能是终端的编码设置问题。确保终端使用的是支持你的文件的编码方式。 2.解决方案: 1.File -> S

vue, 左右布局宽,可拖动改变

1:建立一个draggableMixin.js  混入的方式使用 2:代码如下draggableMixin.js  export default {data() {return {leftWidth: 330,isDragging: false,startX: 0,startWidth: 0,};},methods: {startDragging(e) {this.isDragging = tr

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

问题-windows-VPN不正确关闭导致网页打不开

为什么会发生这类事情呢? 主要原因是关机之前vpn没有关掉导致的。 至于为什么没关掉vpn会导致网页打不开,我猜测是因为vpn建立的链接没被更改。 正确关掉vpn的时候,会把ip链接断掉,如果你不正确关掉,ip链接没有断掉,此时你vpn又是没启动的,没有域名解析,所以就打不开网站。 你可以在打不开网页的时候,把vpn打开,你会发现网络又可以登录了。 方法一 注意:方法一虽然方便,但是可能会有

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

js+css二级导航

效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con

基于Springboot + vue 的抗疫物质管理系统的设计与实现

目录 📚 前言 📑摘要 📑系统流程 📚 系统架构设计 📚 数据库设计 📚 系统功能的具体实现    💬 系统登录注册 系统登录 登录界面   用户添加  💬 抗疫列表展示模块     区域信息管理 添加物资详情 抗疫物资列表展示 抗疫物资申请 抗疫物资审核 ✒️ 源码实现 💖 源码获取 😁 联系方式 📚 前言 📑博客主页: