【Harmony_Bug】forEach + asyncawait 的異步陷阱

一、問題描述

今天在做一個RDB的小項目時,遇到一個問題,因為沒報錯其實也是不算是BUG,以下描述時我就直接說關鍵點,其他代碼忽略。

我的數據模型初始化有六條數據如圖

請添加圖片描述

在持久化層,通過initUserData這個方法執行插入。

請添加圖片描述

在頁面生命周期初始化

請添加圖片描述

但是在運行項目后,初始加載第一次只有三條數據。

請添加圖片描述

當把應用關掉不卸載再開一次,就有六條數據了

請添加圖片描述

但是將應用卸載掉,重新運行項目第一次就又是三條數據了。當時百思不得其解,為什么第一次加載數據只有三條而且是固定三條,我想著是異步執行順序的問題,或數據庫關閉鏈接的問題。萬萬沒想到是foreach的問題。

二、解決辦法

通過網上查資料,發現forEach + async/await 是異步陷阱,原因就是:forEach 無法正確處理異步操作,它不會等待每個 await 完成就直接繼續執行后續代碼。

將循環插入那里的代碼改為:

在這里插入圖片描述
然后不管是不是第一次加載都不會再出現加載數據不全的問題了。

三、重要結論

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78184.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78184.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78184.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大腸桿菌誘導蛋白時OD600=0.6-0.8添加IPTG的思考-實驗操作系列-009

一、為什么用OD600表示菌液濃度? 1. 光密度與吸光值的關系 OD600是指在600納米波長下的光密度(Optical Density),也就是通過細菌懸浮液的光的吸收程度。根據比爾-朗伯定律,光密度與溶液中光學活性物質(如…

OpenHarmony - 小型系統內核(LiteOS-A)(十),魔法鍵使用方法,用戶態異常信息說明

OpenHarmony - 小型系統內核(LiteOS-A)(十) 十四、魔法鍵使用方法 使用場景 在系統運行出現無響應等情況時,可以通過魔法鍵功能確定系統是否被鎖中斷(魔法鍵也無響應)或者查看系統任務運行狀態…

CUDA編程之Grid、Block、Thread線程模型

一、線程模型:Grid、Block、Thread概念 ?1. 層級定義? ?Thread(線程)? CUDA中最基本的執行單元,對應GPU的單個CUDA核心(SP)。每個線程獨立執行核函數指令,擁有獨立的寄存器和局部內存空間?。 ?Block(線程塊)? 由多個線程組成(通常為32的倍數),是邏輯上的并…

實戰交易策略 篇十九:君山居士熊市交易策略

文章目錄 系列文章熊市三大特征熊市操作思維強勢重勢,弱勢重質搶反彈重要前提和五大原則反彈逃頂操盤其他炒股的至高境界力戒“三進三出”八大心理誤區八大戒律股市不敗之法系列文章 實戰交易策略 篇一:奧利弗瓦萊士短線交易策略 實戰交易策略 篇二:杰西利弗莫爾股票大作手…

Flutter IOS 真機 Widget 錯誤。Widget 安裝后系統中沒有

錯誤信息: SendProcessControlEvent:toPid: encountered an error: Error Domaincom.apple.dt.deviceprocesscontrolservice Code8 "Failed to show Widget com.xxx.xxx.ServerStatus error: Error DomainFBSOpenApplicationServiceErrorDomain Code1 "T…

【計算機視覺】CV實戰項目 - 深入解析基于HOG+SVM的行人檢測系統:Pedestrian Detection

深入解析基于HOGSVM的行人檢測系統:從理論到實踐 技術核心:HOGSVM檢測框架HOG特征原理SVM分類器 項目架構與數據準備INRIA Person數據集目錄結構 實戰指南:從零構建檢測系統環境配置完整訓練流程檢測應用 關鍵技術問題與解決方案1. 難例挖掘不…

day01_編程語言介紹丶Java語言概述丶開發環境搭建丶常用DOS命令

編程語言介紹 ?編程語言是一種用于人與計算機之間通信的語言,允許程序員編寫代碼,這些代碼告訴計算機要執行哪些操作?。編程語言可以被視為計算機可以理解并執行的指令集合,它是一種標準化的交流技巧,用于向計算機發出指令。?…

告別默認配置!Xray自定義POC開發指南

文章涉及操作均為測試環境,未授權時切勿對真實業務系統進行測試! 下載與解壓 官網地址: Xray GitHub Releases 根據系統選擇對應版本: Windows:xray_windows_amd64.exe.zipLinux:xray_linux_amd64.zipmacOS:xray_darwin_amd64.zip解壓后得到可執行文件(如 xray_linux_…

C語言編程--17.有效的括號

題目: 給定一個只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序…

代碼隨想錄算法訓練營第60期第十七天打卡

今天我們繼續進入二叉樹的下一個章節,今天的內容我在寫今天的博客前大致看了一下部分題目難度不算大,那我們就進入今天的題目。 第一題對應力扣編號為654的題目最大二叉樹 這道題目的坑相當多,我第一次題目沒有看明白就是我不知道到底是如何…

Burp靶場JWT學習筆記1

JWT(JSON Web Token) 從其名字就可以看出來,它具有表示身份的作用,其本質是將用戶信息儲存到一串json字符串中再將其編碼得到一串token JWT由三部分組成,分別是 Header,Payload,Signatrue JWTBase64(Header).Base6…

第53.5講 | 小項目實戰:用 SHAP 值解釋農作物產量預測模型 [特殊字符][特殊字符]

目錄 ? 項目背景 📦 所用工具 📁 數據字段(模擬) 🧑?💻 代碼實現步驟 🎯 解讀與啟發 🧠 項目拓展建議 ? 項目背景 我們使用一個簡化的玉米產量數據集(可模擬實…

極狐GitLab 合并請求依賴如何解決?

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 合并請求依賴 (PREMIUM ALL) 在極狐GitLab 16.6 中引入了對復雜合并依賴關系的支持,通過名為 remove_mr_blockin…

Django DRF實現用戶數據權限控制

在 Django DRF 中使用 ModelViewSet 時,若需實現用戶僅能查看和操作自己的數據詳情,同時允許所有認證用戶訪問列表,需結合權限類和動態權限分配。以下是具體步驟: 1. 自定義對象權限類 創建一個 IsOwner 權限類,檢查…

【數據結構】——線性表之單鏈表

一、單鏈表的概念和結構 1、單鏈表的概念: 鏈表也是屬于我們的線性表中的一種,其物理結構上是不一定連續的,但是邏輯結構上是一定連續的,所以其是沒辦法像前面的順序表一樣通過找到下一個元素的,其是通過指針來找到下…

線程函數庫

pthread_create函數 pthread_create 是 POSIX 線程庫&#xff08;pthread&#xff09;中的一個函數&#xff0c;用于創建一個新的線程。 頭文件 #include <pthread.h> 函數原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*s…

2.5 橋梁橋面系及附屬結構施工

2.5.1 橋面系施工 1.排水設施 設置縱橫坡及泄水孔&#xff0c;減少橋面積水、防排結合。匯水槽、泄水孔頂面高程低于橋面鋪裝10-15mm。泄水孔邊緣設滲水盲溝泄水管下端至少應伸出構筑物底面100-150mm。泄水管通過豎向管道直接引至地面或雨水管線。豎向管道抱箍、卡環、定位卡…

docker 代理配置沖突問題

問題描述 執行 systemctl show --property=Environment docker 命令看到有如下代理配置 sudo systemctl show --property=Environment docker Environment=HTTP_PROXY=http://127.0.0.1:65001 HTTPS_PROXY=http://127.0.0.1:65001 NO_PROXY=127.0.0.1,docker.io,ghcr.io,uhub…

MATLAB基礎應用精講-【基礎知識篇】發布和共享 MATLAB 代碼

目錄 MATLAB發布代碼---生成文檔pdf 分節符對發布文件的分節 實時腳本 Matlab workspace與m腳本數據共享 發布和共享 MATLAB 代碼 在實時編輯器中創建和共享實時腳本 發布 MATLAB 代碼文件 (.m) 添加幫助和創建文檔 發布 MATLAB 代碼文件 (.m) 可創建包括您的代碼、注釋…

JDBC 批處理與事務處理:提升數據操作效率與一致性的密鑰

目錄 一. JDBC批量添加數據 1. 什么是批量添加數據 2. 實現數據的批量添加 a. 方式一&#xff1a;不分塊 二. JDBC事務處理 1. 什么是事務 2. JDBC事務處理實現 三. 總結 前言 本文來講解JDBC的批處理和事務處理 這對數據的安全性和準確性以及高效率提供很好的辦法 話不…