91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS實(shí)戰(zhàn):一招解決等待多個(gè)并發(fā)結(jié)果

尤楓 ? 來(lái)源:jf_54996641 ? 作者:jf_54996641 ? 2025-06-09 14:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

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

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

問題

在開發(fā)清除緩存的功能時(shí),鴻蒙NEXT提供的文檔中說(shuō)明,應(yīng)用緩存文件有四個(gè),需要清除指定的四個(gè)緩存文件夾。如圖所示:

清除緩存代碼如下:

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

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

解決方案

一般思路

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

注意是單次I/O任務(wù),可問題是我們需要解決同時(shí)并發(fā)問題,一次拿到四次清除緩存結(jié)果再去統(tǒng)計(jì)緩存大小。這個(gè)時(shí)候可能有的小伙伴就會(huì)說(shuō),那就先清除第一個(gè),等一個(gè)結(jié)果返回再清除第二個(gè),以此類推。也能解決問題。如下圖所示:

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

但是這樣就會(huì)帶來(lái)兩個(gè)問題:多層嵌套與代碼混亂。在Flutter中這個(gè)問題非常好解決。這里就不詳細(xì)描述了。

優(yōu)雅方案

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

  1. 先將文件清除包裝成一個(gè)異步任務(wù)。
asyncClear(dir: string): Promise< void > {
    return new Promise((resolve, reject) = > {
      fs.access(dir).then((isHas: boolean) = > {
        if (isHas) {
          fs.rmdir(dir)
        }
        resolve()
      })
    })
  }
  1. 將四個(gè)緩存文件夾對(duì)應(yīng)的任務(wù)放在一個(gè)數(shù)組中。
let promises = [
      this.asyncClear("文件夾1"),
      this.asyncClear("文件夾2"),
      this.asyncClear("文件夾3"),
      this.asyncClear("文件夾4")
    ]
  1. 將任務(wù)數(shù)組放進(jìn)Promis.all中,等待四個(gè)任務(wù)執(zhí)行結(jié)束。
Promise.all(promises).then(() = > {
      // 結(jié)束回調(diào)
    })
  1. 在結(jié)束回調(diào)中 再去調(diào)用計(jì)算緩存大小的方法。
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
      });

總結(jié)

鴻蒙NEXT的API還不算完善,需要每個(gè)開發(fā)者的參與,發(fā)現(xiàn)問題,提出問題,鴻蒙開發(fā)人員才能更好的解決問題。如果您也是鴻蒙開發(fā)者,有其他更好的解決方案,歡迎評(píng)論區(qū)交流 ,互相學(xué)習(xí),互相成長(zhǎng)!

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2963

    瀏覽量

    45920
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2153

    瀏覽量

    36071
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Go 語(yǔ)言高并發(fā)服務(wù)設(shè)計(jì)與性能調(diào)優(yōu)實(shí)戰(zhàn):從萬(wàn)級(jí)到百萬(wàn)級(jí)并發(fā)的演進(jìn)之路

    10W+ 連接 性能滿意度 開發(fā)者滿意度 89% 微服務(wù)采用率 云原生項(xiàng)目中占比 67% 本文將從 并發(fā)模型 、 性能優(yōu)化 、 資源管理 、監(jiān)控調(diào)優(yōu)四個(gè)維度,分享套經(jīng)過多個(gè)并發(fā)項(xiàng)
    發(fā)表于 02-18 19:19

    如何在單個(gè)圖表上繪制多個(gè)測(cè)量結(jié)果曲線

    用戶常常希望對(duì)批設(shè)備進(jìn)行測(cè)量,并將結(jié)果顯示在同個(gè)圖表上以便比較。APx序列(Sequence)的設(shè)計(jì)是每次僅顯示個(gè)設(shè)備的結(jié)果。如果您的
    的頭像 發(fā)表于 02-11 09:02 ?122次閱讀
    如何在單個(gè)圖表上繪制<b class='flag-5'>多個(gè)</b>測(cè)量<b class='flag-5'>結(jié)果</b>曲線

    文說(shuō)透了如何實(shí)現(xiàn)單片機(jī)的多任務(wù)并發(fā)!

    多任務(wù)并發(fā)。 、任務(wù)調(diào)度 任務(wù)調(diào)度是多任務(wù)并發(fā)個(gè)非常重要的概念。它指的是如何在系統(tǒng)中組織和規(guī)劃多個(gè)任務(wù)的順序和時(shí)間。任務(wù)調(diào)度的目的是使
    發(fā)表于 01-06 06:46

    智能樓宇改造避坑指南:別再換掉所有老設(shè)備!一招搞定ETHERNET/IP轉(zhuǎn)DEVICENET的共存難題

    智能樓宇改造避坑指南:別再換掉所有老設(shè)備!一招搞定ETHERNET/IP轉(zhuǎn)DEVICENET的共存難題 1. 項(xiàng)目背景:老舊樓宇的智能化挑戰(zhàn) 在現(xiàn)代智能樓宇控制系統(tǒng)中,我們常面臨新舊設(shè)備混合的復(fù)雜
    的頭像 發(fā)表于 12-17 15:35 ?250次閱讀
    智能樓宇改造避坑指南:別再換掉所有老設(shè)備!<b class='flag-5'>一招</b>搞定ETHERNET/IP轉(zhuǎn)DEVICENET的共存難題

    Swift 的并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)

    ??前言 Swift 內(nèi)置并發(fā)系統(tǒng)的好處之是它可以更輕松地并行執(zhí)行多個(gè)異步任務(wù),這反過來(lái)又可以使我們顯著加快可以分解為單獨(dú)部分的操作。 在本文中,讓我們看下幾種不同的方法,以及這些
    的頭像 發(fā)表于 11-11 11:33 ?444次閱讀

    別再卡分頁(yè)!淘寶全量商品接口實(shí)戰(zhàn)開發(fā)指南:從并發(fā)優(yōu)化到數(shù)據(jù)完整性閉環(huán)

    淘寶店鋪全量商品接口實(shí)戰(zhàn)指南:詳解權(quán)限申請(qǐng)、分頁(yè)優(yōu)化、并發(fā)拉取與增量更新,結(jié)合代碼實(shí)現(xiàn)高效穩(wěn)定的數(shù)據(jù)獲取,解決超時(shí)、限流、數(shù)據(jù)丟失等核心難題,助力電商數(shù)據(jù)分析避坑提效。
    的頭像 發(fā)表于 09-30 10:47 ?575次閱讀

    AppGallery Connect(HarmonyOS 5及以上) --公開測(cè)試創(chuàng)建并發(fā)布測(cè)試版本(三)

    。手機(jī)號(hào)碼用于華為審核人員與您溝通審核問題,郵箱用于接收上架審核結(jié)果,應(yīng)用整改或下架通知。 19.配置測(cè)試發(fā)布。 20.點(diǎn)擊頁(yè)面右上角“提交”,將測(cè)試版本提交審核。提交成功后,可在“版本列表”頁(yè)面查看版本
    發(fā)表于 09-29 17:38

    AppGallery Connect(HarmonyOS 5及以上) --公開測(cè)試創(chuàng)建并發(fā)布測(cè)試版本(

    )的公開測(cè)試版本會(huì)自動(dòng)下架。 發(fā)布測(cè)試版本 首先,您需創(chuàng)建并發(fā)布測(cè)試版本。最多支持1個(gè)公開測(cè)試版本在架, 1.登錄AppGallery Connect,選擇“APP” 2.在應(yīng)用列表頁(yè)
    發(fā)表于 09-26 17:24

    創(chuàng)建并發(fā)布測(cè)試版本(

    配置軟件版本。 5.配置測(cè)試信息。 測(cè)試信息默認(rèn)繼承全網(wǎng)版本信息或最近個(gè)測(cè)試版本填寫的信息。如需調(diào)整,請(qǐng)?jiān)诋?dāng)前測(cè)試版本提交前重新審視并修改,測(cè)試信息配置不影響全網(wǎng)版本的應(yīng)用信息。 本文主要從參考引用自HarmonyOS官方文檔
    發(fā)表于 09-16 15:21

    工業(yè)電路總出問題?檳城BMG10D系列壓敏復(fù)合器件:一招解決過壓難題

    ”。工業(yè)電路總出問題?檳城BMG10D系列壓敏復(fù)合器件:一招解決過壓難題。它從根源上保證了品質(zhì)——原廠技術(shù)支持、穩(wěn)定供貨,不用擔(dān)心中間環(huán)節(jié)出岔子,買得放心,用得也踏
    的頭像 發(fā)表于 09-05 16:58 ?599次閱讀
    工業(yè)電路總出問題?檳城BMG10D系列壓敏復(fù)合器件:<b class='flag-5'>一招</b>解決過壓難題

    一招解決多地區(qū)無(wú)感考勤的問題

    在當(dāng)今集團(tuán)化和連鎖化經(jīng)營(yíng)日益普及的背景下,企業(yè)通常會(huì)遭遇個(gè)管理難題:分散于各地的分公司考勤數(shù)據(jù)難以統(tǒng),統(tǒng)計(jì)工作滯后且流程繁瑣。傳統(tǒng)的指紋或刷卡考勤方式需要人工核對(duì),這不僅效率低下,還容易出現(xiàn)作弊
    的頭像 發(fā)表于 07-04 16:46 ?591次閱讀

    HarmonyOS實(shí)戰(zhàn)一招搞定保存圖片到相冊(cè)

    保存圖片功能幾乎是每個(gè)應(yīng)用程序必備的功能之,當(dāng)用戶遇到喜歡的圖片時(shí)可以保存到手機(jī)相冊(cè)。那么在鴻蒙中保存圖片是否也需要申請(qǐng)用戶存儲(chǔ)權(quán)限以及如何將圖片保存到相冊(cè),本文將詳細(xì)講述怎么保存網(wǎng)絡(luò)圖片,指定布局生成圖片保存至相冊(cè)的功能實(shí)現(xiàn)。
    的頭像 發(fā)表于 06-24 17:04 ?1271次閱讀

    鴻蒙5開發(fā)寶藏案例分享---應(yīng)用并發(fā)設(shè)計(jì)

    ?** 鴻蒙并發(fā)編程實(shí)戰(zhàn)指南:解鎖ArkTS多線程黑科技** 嘿,開發(fā)者朋友們! 今天給大家扒扒鴻蒙官方文檔里藏著的并發(fā)編程寶藏—— 100+實(shí)戰(zhàn)
    發(fā)表于 06-12 16:19

    HarmonyOS實(shí)戰(zhàn):組件化項(xiàng)目搭建

    ?本文將詳細(xì)講解HarmonyOs組件化項(xiàng)目搭建的全過程,帶領(lǐng)大家實(shí)現(xiàn)個(gè)組件化項(xiàng)目。 項(xiàng)目創(chuàng)建 首先創(chuàng)建個(gè)項(xiàng)目工程,點(diǎn)擊開發(fā)工具DevEco-Stdio的****File 選項(xiàng),選擇 New 然后點(diǎn)擊 Create Proj
    的頭像 發(fā)表于 06-09 14:58 ?678次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>實(shí)戰(zhàn)</b>:組件化項(xiàng)目搭建

    HarmonyOS5云服務(wù)技術(shù)分享--ArkTS開發(fā)Node環(huán)境

    氣的方式探索這個(gè)功能,結(jié)尾還有實(shí)用總結(jié)和鼓勵(lì)彩蛋哦~? ? HarmonyOS云函數(shù)開發(fā):核心能力與價(jià)值 HarmonyOS的云函數(shù)(Serverless)為開發(fā)者提供了??無(wú)服務(wù)器架構(gòu)??的便捷
    發(fā)表于 05-22 17:21