【Harmony_Bug】forEach + asyncawait 的异步陷阱

一、问题描述

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

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

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

在页面生命周期初始化

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

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

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

二、解决办法

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

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

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

三、重要结论

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

相关推荐
凤年徐4 分钟前
【C/C++】深入理解指针(六)
c语言·开发语言·c++·经验分享·笔记·指针
冯志浩6 分钟前
HarmonyOS - 实现 ArkTS 和 web 页面的数据交互
harmonyos·掘金·金石计划
别说我什么都不会10 分钟前
【仓颉三方库】音视频开发—— mp3tag4cj
harmonyos
学了就忘13 分钟前
JavaScript 异步编程与请求取消全指南
开发语言·javascript·ecmascript
通南北16 分钟前
使用python实现自动化拉取压缩包并处理流程
开发语言·python·自动化
十五年专注C++开发24 分钟前
Qt中的全局函数讲解集合(全)
开发语言·c++·qt·算法
一马平川的大草原33 分钟前
读书笔记--华为从偶然到必然之创新与技术开发阅读有感
华为·学习笔记·读书笔记
martian66542 分钟前
信创时代技术栈选择与前景分析:国产替代背景下的战略路径与实践指南
开发语言·科技·系统安全·创业创新
{⌐■_■}1 小时前
【计网】认识跨域,及其在go中通过注册CORS中间件解决跨域方案,go-zero、gin
java·linux·开发语言·c++·中间件·golang·gin
半青年1 小时前
鸿蒙系统应用开发全栈指南
华为·华为云·harmonyos