【Harmony_Bug】forEach + asyncawait 的异步陷阱

一、问题描述

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

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

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

在页面生命周期初始化

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

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

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

二、解决办法

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

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

然后不管是不是第一次加载都不会再出现加载数据不全的问题了。

三、重要结论

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

相关推荐
Chris _data几秒前
C# WinForms 后台轮询 Modbus 数据与 UI 更新实践
开发语言·ui·c#
Exploring1 分钟前
鸿蒙App开发,华为手机里装这一个就够了——「Hola万能计算器」到底有多万能?
harmonyos
晚风叙码2 分钟前
从0吃透C++入门|第一个程序、命名空间与缺省函数基础
开发语言·c++
j_xxx404_4 分钟前
Linux线程:核心机制与优雅的 C++ 封装实践|附源码
linux·运维·服务器·开发语言·c++·人工智能·ai
qingyulee5 分钟前
机器学习概述、KNN算法
开发语言·python·机器学习
mohaoyuan5 分钟前
软考架构师知识点汇总
开发语言·架构
Zhang~Ling11 分钟前
C++ 模板进阶:非类型参数、特化与分离编译深度解析
开发语言·c++
想你依然心痛14 分钟前
HarmonyOS 6 悬浮导航 + 沉浸光感:打造鸿蒙智能体驱动的沉浸式数据可视化驾驶舱
华为·信息可视化·ar·harmonyos·智能体
Oj92q85H515 分钟前
如何在Dev-C++中使用TDM-GCC编译项目
linux·开发语言·c++
Chase_______15 分钟前
【Java】String 常量池、== 与 equals 详解:从引用比较到 intern() 一次讲清
java·开发语言