【Harmony_Bug】forEach + asyncawait 的异步陷阱

一、问题描述

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

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

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

在页面生命周期初始化

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

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

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

二、解决办法

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

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

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

三、重要结论

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

相关推荐
阿巴~阿巴~24 分钟前
冒泡排序算法
c语言·开发语言·算法·排序算法
看到我,请让我去学习2 小时前
QT - QT开发进阶合集
开发语言·qt
AlbertZein2 小时前
HarmonyOS5 凭什么学鸿蒙—— GetContext
架构·harmonyos
weixin_307779132 小时前
VS Code配置MinGW64编译SQLite3库
开发语言·数据库·c++·vscode·算法
励志不掉头发的内向程序员3 小时前
STL库——string(类函数学习)
开发语言·c++
一百天成为python专家3 小时前
Python循环语句 从入门到精通
开发语言·人工智能·python·opencv·支持向量机·计算机视觉
Sunhen_Qiletian3 小时前
朝花夕拾(五)--------Python 中函数、库及接口的详解
开发语言·python
hqwest3 小时前
C#WPF实战出真汁07--【系统设置】--菜品类型设置
开发语言·c#·wpf·grid设计·stackpanel布局
前路不黑暗@4 小时前
C语言:操作符详解(二)
c语言·开发语言·经验分享·笔记·学习·学习方法·visual studio
深盾科技5 小时前
Kotlin Data Classes 快速上手
android·开发语言·kotlin