【Harmony_Bug】forEach + asyncawait 的异步陷阱

一、问题描述

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

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

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

在页面生命周期初始化

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

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

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

二、解决办法

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

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

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

三、重要结论

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

相关推荐
laocooon5238578861 分钟前
python 收发信的功能。
开发语言·python
xixixi777772 分钟前
STIX/TAXII:网络威胁情报的“普通话”与“顺丰快递”
开发语言·安全·php·威胁·攻击检测·stix·taxii
Tony Bai5 分钟前
Cloudflare 2025 年度报告发布——Go 语言再次“屠榜”API 领域,AI 流量激增!
开发语言·人工智能·后端·golang
ID_180079054735 分钟前
有没有其他语言实现淘宝商品详情API接口采集的方案?
开发语言
清水白石0088 分钟前
《Python 责任链模式实战指南:从设计思想到工程落地》
开发语言·python·责任链模式
love is sour16 分钟前
深入浅出 jmap:Java 内存分析的“显微镜“
java·开发语言·测试工具·性能优化
json{shen:"jing"}20 分钟前
2-C语言的运算符和表达式
c语言·开发语言
AI视觉网奇26 分钟前
ue 虚幻引擎学习笔记
开发语言·虚幻引擎
ghie909040 分钟前
使用MATLAB的k-Wave工具箱进行超声CT成像
开发语言·matlab
catchadmin40 分钟前
PHP 8.6 新增 clamp() 函数
开发语言·php