女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS實戰:一招解決等待多個并發結果

尤楓 ? 來源:jf_54996641 ? 作者:jf_54996641 ? 2025-06-09 14:57 ? 次閱讀

前言

年前公司與華為簽訂了合作備忘錄,加入了鴻蒙生態這個大家庭。。公司想趕著鴻蒙純血系統上市之前,發布自己的鴻蒙軟件。開發鴻蒙NEXT版本軟件就變成了今年的一個工作重心。

** 本文主要講解開發過程中遇到的并發問題,官方API 11文檔寫的太簡單了,根本沒有解決方案,小編也是苦思冥想,絞盡腦汁才找到解決方案。需要開發鴻蒙的小伙伴可以仔細閱讀,避免踩坑。**

問題

在開發清除緩存的功能時,鴻蒙NEXT提供的文檔中說明,應用緩存文件有四個,需要清除指定的四個緩存文件夾。如圖所示:

清除緩存代碼如下:

import fs from '@ohos.file.fs'
          
    fs.access("文件路徑").then((isHas:boolean) = > {
      if(isHas) { //判斷文件是否存在
        fs.rmdirSync("文件路徑")//刪除文件
       
      }
    })

需要同時清除這四個文件夾,然后再計算這四個文件夾的大小。由于fs.access 方法是耗時操作。所以只能在異步線程中執行。

解決方案

一般思路

鴻蒙官方文檔API 11 提供了使用Promise和async/await處理異步并發問題。

注意是單次I/O任務,可問題是我們需要解決同時并發問題,一次拿到四次清除緩存結果再去統計緩存大小。這個時候可能有的小伙伴就會說,那就先清除第一個,等一個結果返回再清除第二個,以此類推。也能解決問題。如下圖所示:

fs.access("文件路徑1").then((isHas:boolean) = > {
      if(isHas) { //判斷文件是否存在
        fs.rmdirSync("文件路徑1")//刪除文件
               
       fs.access("文件路徑2").then((isHas:boolean) = > {
         if(isHas) { //判斷文件是否存在
           fs.rmdirSync("文件路徑2")//刪除文件
             .....................
        }
    })
      }
    })

但是這樣就會帶來兩個問題:多層嵌套與代碼混亂。在Flutter中這個問題非常好解決。這里就不詳細描述了。

優雅方案

使用Promise.all 解決。小編在官方文檔中并沒有找到Promise.all 相關說明,可能是鴻蒙還沒注意到這種需求場景吧。直接上代碼。

  1. 先將文件清除包裝成一個異步任務。
asyncClear(dir: string): Promise< void > {
    return new Promise((resolve, reject) = > {
      fs.access(dir).then((isHas: boolean) = > {
        if (isHas) {
          fs.rmdir(dir)
        }
        resolve()
      })
    })
  }
  1. 將四個緩存文件夾對應的任務放在一個數組中。
let promises = [
      this.asyncClear("文件夾1"),
      this.asyncClear("文件夾2"),
      this.asyncClear("文件夾3"),
      this.asyncClear("文件夾4")
    ]
  1. 將任務數組放進Promis.all中,等待四個任務執行結束。
Promise.all(promises).then(() = > {
      // 結束回調
    })
  1. 在結束回調中 再去調用計算緩存大小的方法。
storageStatistics.getCurrentBundleStats().then((bundleStats) = > {
        let cacheSizeNum = bundleStats.cacheSize
        let unit = "KB"
        if (cacheSizeNum > 1024) {
          cacheSizeNum = Math.floor(cacheSizeNum) / 1024
          unit = "KB"
        }
        if (cacheSizeNum > 1024) {
          cacheSizeNum = Math.floor(cacheSizeNum) / 1024
          unit = "MB"
        }
        if (cacheSizeNum > 1024) {
          cacheSizeNum = Math.floor(cacheSizeNum) / 1024
          unit = "GB"
        }
        if (cacheSizeNum > 1024) {
          cacheSizeNum = Math.floor(cacheSizeNum) / 1024
          unit = "TB"
        }
        let chacheSizeString = "" + Math.floor(cacheSizeNum) + unit
      });

總結

鴻蒙NEXT的API還不算完善,需要每個開發者的參與,發現問題,提出問題,鴻蒙開發人員才能更好的解決問題。如果您也是鴻蒙開發者,有其他更好的解決方案,歡迎評論區交流 ,互相學習,互相成長!

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    59

    文章

    2531

    瀏覽量

    43788
  • HarmonyOS
    +關注

    關注

    79

    文章

    2054

    瀏覽量

    32167
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    HarmonyOS實戰:組件化項目搭建

    ?本文將詳細講解HarmonyOs組件化項目搭建的全過程,帶領大家實現個組件化項目。 項目創建 首先創建個項目工程,點擊開發工具DevEco-Stdio的****File 選項,選擇 New 然后點擊 Create Proj
    的頭像 發表于 06-09 14:58 ?38次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>實戰</b>:組件化項目搭建

    HarmonyOS5云服務技術分享--ArkTS開發Node環境

    氣的方式探索這個功能,結尾還有實用總結和鼓勵彩蛋哦~? ? HarmonyOS云函數開發:核心能力與價值 HarmonyOS的云函數(Serverless)為開發者提供了??無服務器架構??的便捷
    發表于 05-22 17:21

    【 TE Connectivity 】GRACE INERTIA 組合連接器,多負載連接,“一招”解鎖

    ,新成員GRACE INERTIA 組合連接器能為多功能線對板解決方案提供更多設計靈活性,鍵解鎖以上困擾。使用更少數量的插座,搭載多個插頭,直接與各種負載相連。不僅裝配效率顯著提高,同時占用更少的PCB空間。慣性鎖扣提供的固定作用,讓連接更加可靠出色。 ? 優
    發表于 03-07 11:33 ?191次閱讀
    【 TE Connectivity 】GRACE INERTIA 組合連接器,多負載連接,“<b class='flag-5'>一招</b>”解鎖

    一招鮮,吃遍天的EMC三要素

    系統的電磁兼容性問題,更是多個系統之間相互作用所帶來的系列復雜情況。系統與系統之間的相互影響并非簡單的線性關系。它們之間的交互作用可能涉及多種因素,如空間輻射、信
    的頭像 發表于 03-06 10:41 ?1108次閱讀
    <b class='flag-5'>一招</b>鮮,吃遍天的EMC三要素

    HarmonyOS NEXT 原生應用/元服務-ArkTS代碼調試等待調試

    之前,將直處于等待狀態。可通過進度條右側的取消按鈕進行取消。 拉起設備端應用,此時將會進入調試。 本文主要參考與引用自HarmonyOS官方文檔。
    發表于 03-03 16:01

    解決蓄電池隱患,在線監測一招制勝

    摘要 ? ? ? ? 本文針對蓄電池在線監測裝置的設計與實現展開研究。隨著蓄電池在各行各業的廣泛應用,其性能監測和維護變得尤為重要。本研究設計了種基于物聯網技術的蓄電池在線監測裝置,能夠實時采集
    的頭像 發表于 02-21 14:31 ?393次閱讀
    解決蓄電池隱患,在線監測<b class='flag-5'>一招</b>制勝

    GRACE INERTIA 組合連接器,多負載連接,“一招”解鎖

    ,新成員GRACE INERTIA 組合連接器能為多功能線對板解決方案提供更多設計靈活性,鍵解鎖以上困擾。使用更少數量的插座,搭載多個插頭,直接與各種負載相連。不僅裝配效率顯著提高,同時占用更少的PCB空間。慣性鎖扣提供的固定作用,讓連接更加可靠出色。 ? ?
    發表于 02-20 14:51 ?1096次閱讀

    一招治“浮”! 高精度3D線激光輪廓測量儀保障螺絲裝配

    浮高產生的系列問題,都將對機器的安全運行埋下隱患。 各類因素產生的螺絲浮高 GL-8000系列 為您一招治“浮” 螺絲浮高檢測案例 01 檢測需求 1.次性掃描檢測4個螺絲的高度差 2.精度要求0.03-0.05mm 3.速
    的頭像 發表于 02-06 18:15 ?423次閱讀
    <b class='flag-5'>一招</b>治“浮”! 高精度3D線激光輪廓測量儀保障螺絲裝配

    名單公布!【書籍評測活動NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應用開發實踐

    HarmonyOS NEXT的開發框架體系,幫助讀者快速建立起整體認知。書中包含了大量實戰案例,涵蓋界面構建、網絡交互、多設備適配和協同開發等多個場景。另外,書中還詳細講解了HarmonyOS
    發表于 01-20 16:53

    文詳解CMP并發多協議

    隨著無線通信的不斷發展,對可同時支持多個協議的設備的需求顯著增加。此功能稱為并發多協議(Concurrent Multiprotocol, CMP),允許設備同時在不同無線標準下運行,從而提高設備的多功能性和適應性。
    的頭像 發表于 01-03 10:12 ?703次閱讀
    <b class='flag-5'>一</b>文詳解CMP<b class='flag-5'>并發</b>多協議

    HarmonyOS課》煥新升級,賦能開發者快速掌握鴻蒙應用開發

    HarmonyOS課》煥新升級,賦能開發者快速掌握鴻蒙應用開發 隨著HarmonyOS NEXT發布,鴻蒙生態日益壯大,廣大開發者對于系統化學習平臺和課程的需求愈發強烈。近日,華為精心打造
    發表于 01-02 14:24

    教你三異地訪問NAS

    NAS作為家庭或企業存儲數據的神器,能夠讓我們隨時隨地訪問存儲在其中的文件。但當我們身處異地時,如何高效、安全地訪問NAS卻成了個難題。別擔心,節點小寶來幫你! 第一招:利用內網穿透功能 首先,在
    的頭像 發表于 01-02 11:26 ?877次閱讀
    教你三<b class='flag-5'>招</b>異地訪問NAS

    存儲空間告急?NAS擴容一招搞定,輕松無憂!

    和vlog …… 這些點點滴滴 都是我們共同走過2024年的珍貴憑證 當硬盤的進度條漸漸變紅 仿佛在向我們展示這年來滿滿的收獲 但存儲空間緊急告急怎么辦? NAS擴容一招搞定 、陣列擴容 在不改變陣列模式,保證數據不被刪除的
    的頭像 發表于 12-24 16:35 ?580次閱讀
    存儲空間告急?NAS擴容<b class='flag-5'>一招</b>搞定,輕松無憂!

    HarmonyOS開發寶典震撼來襲,卓越應用開發之旅觸即發,輕松啟程!

    HarmonyOS賦能產品,全面護航開發者從HarmonyOS感知、學習進階、開發實踐至技術支持的全旅程,助力開發者高效開發! 我們傾心打造了個涵蓋高頻場景的最佳實踐案例庫,匯聚豐富實戰
    發表于 12-05 08:57

    請問多個ADS1220如何能同步得到采樣結果

    請問多個ADS1220如何能同步得到采樣結果,或者有沒有與ADS1220功能,性能類似,但是帶有同步控制的ADC?
    發表于 11-29 08:30