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

【Harmony_Bug】forEach + asyncawait 的异步陷阱

一、问题描述

今天在做一个RDB的小项目时,遇到一个问题,因为没报错其实也是不算是BUG,以下描述时我就直接说关键点,其他代码忽略。

我的数据模型初始化有六条数据如图

请添加图片描述

在持久化层,通过initUserData这个方法执行插入。

请添加图片描述

在页面生命周期初始化

请添加图片描述

但是在运行项目后,初始加载第一次只有三条数据。

请添加图片描述

当把应用关掉不卸载再开一次,就有六条数据了

请添加图片描述

但是将应用卸载掉,重新运行项目第一次就又是三条数据了。当时百思不得其解,为什么第一次加载数据只有三条而且是固定三条,我想着是异步执行顺序的问题,或数据库关闭链接的问题。万万没想到是foreach的问题。

二、解决办法

通过网上查资料,发现forEach + async/await 是异步陷阱,原因就是:forEach 无法正确处理异步操作,它不会等待每个 await 完成就直接继续执行后续代码。

将循环插入那里的代码改为:

在这里插入图片描述
然后不管是不是第一次加载都不会再出现加载数据不全的问题了。

三、重要结论

一句话,foreach 不要和async和await一起用,需要的话就用for …of…。

相关文章:

  • node.js 实战——从0开始做一个餐厅预订(express+node+ejs+bootstrap)
  • git 的基本使用
  • RTMP 入门指南
  • 【语法】C++的stack和queue
  • 零基础快速搭建AI绘画网站!用Gradio玩转Stable Diffusion
  • Langchain入门介绍
  • Spring @Transactional 自调用问题深度解析
  • C语言----函数栈帧讲解
  • 抖音IP属地跟无线网有关系吗?一文解析
  • 【智慧城市】新中地GIS开发实训:基于 Vue 框架的武汉智慧旅游系统
  • http协议详解附带c/c++服务器和客户端源码
  • 在统信UOS/麒麟Kylin OS中创建网页桌面快捷方式
  • 反序列化漏洞1
  • python pymysql如何保证数据库更新成功
  • 12.thinkphp验证
  • 隧道调频广播覆盖的实现路径:隧道无线广播技术赋能行车安全升级,隧道汽车广播收音系统助力隧道安全管理升级
  • 海量信息处理分析有效决策
  • 控件和QWidget核心属性
  • Android——Activity与Fragment通信
  • SpringBoot 常用注解大全
  • 首映|《人生开门红》:段子背后都是案子
  • 地下管道密布成难题,道路修整如何破局?
  • 特朗普政府称将恢复被终止的外国学生合法身份
  • 女子隐私被“上墙”莫名遭网暴,网警揪出始作俑者
  • 还山记——走进山水、感受山水艺术的魅力
  • 韩国称DeepSeek未经同意将用户数据传至境外,外交部回应