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

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

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

鴻蒙OS開發(fā)實例:【ArkTS類庫異步并發(fā)簡述Promise】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-02 18:37 ? 次閱讀

Promise和async/await提供異步并發(fā)能力,是標(biāo)準(zhǔn)的JS異步語法。異步代碼會被掛起并在之后繼續(xù)執(zhí)行,同一時間只有一段代碼執(zhí)行,適用于單次I/O任務(wù)的場景開發(fā),例如一次網(wǎng)絡(luò)請求、一次文件讀寫等操作。異步語法是一種編程語言的特性,允許程序在執(zhí)行某些操作時不必等待其完成,而是可以繼續(xù)執(zhí)行其他操作。

Promise是一種用于處理異步操作的對象,可以將異步操作轉(zhuǎn)換為類似于同步操作的風(fēng)格,以方便代碼編寫和維護。Promise提供了一個狀態(tài)機制來管理異步操作的不同階段,并提供了一些方法來注冊回調(diào)函數(shù)以處理異步操作的成功或失敗的結(jié)果。

Promise有三種狀態(tài):pending(進行中)、fulfilled(已完成)和rejected(已拒絕)。Promise對象創(chuàng)建后處于pending狀態(tài),并在異步操作完成后轉(zhuǎn)換為fulfilled或rejected狀態(tài)。

最基本的用法是通過構(gòu)造函數(shù)實例化一個Promise對象,同時傳入一個帶有兩個參數(shù)的函數(shù),通常稱為executor函數(shù)。executor函數(shù)接收兩個參數(shù):resolve和reject,分別表示異步操作成功和失敗時的回調(diào)函數(shù)。例如,以下代碼創(chuàng)建了一個Promise對象并模擬了一個異步操作

搜狗高速瀏覽器截圖20240326151547.png

setTimeout(() = > {
    const randomNumber = Math.random();
    if (randomNumber > 0.5) {
      resolve(randomNumber);
    } else {
      reject(new Error('Random number is too small'));
    }
  }, 1000);
});
});

上述代碼中,setTimeout函數(shù)模擬了一個異步操作,并在1秒鐘后隨機生成一個數(shù)字。如果隨機數(shù)大于0.5,則執(zhí)行resolve回調(diào)函數(shù)并將隨機數(shù)作為參數(shù)傳遞;否則執(zhí)行reject回調(diào)函數(shù)并傳遞一個錯誤對象作為參數(shù)。

Promise對象創(chuàng)建后,可以使用then方法和catch方法指定fulfilled狀態(tài)和rejected狀態(tài)的回調(diào)函數(shù)。then方法可接受兩個參數(shù),一個處理fulfilled狀態(tài)的函數(shù),另一個處理rejected狀態(tài)的函數(shù)。只傳一個參數(shù)則表示狀態(tài)改變就執(zhí)行,不區(qū)分狀態(tài)結(jié)果。使用catch方法注冊一個回調(diào)函數(shù),用于處理“失敗”的結(jié)果,即捕獲Promise的狀態(tài)改變?yōu)閞ejected狀態(tài)或操作失敗拋出的異常。例如:

promise.then(result = > {
  console.info(`Random number is ${result}`);
}).catch(error = > {
  console.error(error.message);
});

上述代碼中,then方法的回調(diào)函數(shù)接收Promise對象的成功結(jié)果作為參數(shù),并將其輸出到控制臺上。如果Promise對象進入rejected狀態(tài),則catch方法的回調(diào)函數(shù)接收錯誤對象作為參數(shù),并將其輸出到控制臺上。

審核編輯 黃宇

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

    關(guān)注

    57

    文章

    2305

    瀏覽量

    42697
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    4360
收藏 人收藏

    評論

    相關(guān)推薦

    ArkTS語言基礎(chǔ)-解析

    ArkTS語言基礎(chǔ)是HarmonyOS系統(tǒng)上為應(yīng)用開發(fā)者提供的常用基礎(chǔ)能力,主要包含能力如下圖所示。 圖1 ArkTS語言基礎(chǔ)
    發(fā)表于 02-20 16:44

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)單次I/O任務(wù)開發(fā)

    Promise和async/await提供異步并發(fā)能力,適用于單次I/O任務(wù)的場景開發(fā),本文以使用異步進行單次文件寫入為例來提供指導(dǎo)。 實現(xiàn)
    發(fā)表于 03-04 14:07

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)概述

    ArkTS語言基礎(chǔ)是HarmonyOS系統(tǒng)上為應(yīng)用開發(fā)者提供的常用基礎(chǔ)能力,主要包含能力如下圖所示。 1.提供異步
    發(fā)表于 03-05 15:42

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)異步并發(fā)簡述async/await

    async/await是一種用于處理異步操作的Promise語法糖,使得編寫異步代碼變得更加簡單和易讀。通過使用async關(guān)鍵字聲明一個函數(shù)為異步函數(shù),并使用await關(guān)鍵字等待
    發(fā)表于 03-06 14:44

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)異步并發(fā)簡述Promise

    Promise和async/await提供異步并發(fā)能力,是標(biāo)準(zhǔn)的JS異步語法。異步代碼會被掛起并在之后繼續(xù)執(zhí)行,同一時間只有一段代碼執(zhí)行,適
    發(fā)表于 03-07 15:46

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程@Concurrent裝飾器校驗并發(fā)函數(shù)

    在使用TaskPool時,執(zhí)行的并發(fā)函數(shù)需要使用該裝飾器修飾,否則無法通過相關(guān)校驗。從API version 9開始,該裝飾器支持在ArkTS卡片中使用。 裝飾器說明 裝飾器使用示例 import
    發(fā)表于 03-18 10:30

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程并發(fā)概述

    并發(fā)模型是用來實現(xiàn)不同應(yīng)用場景中并發(fā)任務(wù)的編程模型,常見的并發(fā)模型分為基于內(nèi)存共享的并發(fā)模型和基于消息通信的并發(fā)模型。 Actor
    發(fā)表于 03-22 15:40

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程并發(fā)概述

    并發(fā)模型是用來實現(xiàn)不同應(yīng)用場景中并發(fā)任務(wù)的編程模型,常見的并發(fā)模型分為基于內(nèi)存共享的并發(fā)模型和基于消息通信的并發(fā)模型。 Actor
    發(fā)表于 03-28 14:35

    HarmonyOS如何使用異步并發(fā)能力進行開發(fā)

    策略進行優(yōu)化和開發(fā)ArkTS支持異步并發(fā)和多線程并發(fā)。 ● Promise和async/aw
    發(fā)表于 09-22 17:35

    HarmonyOS語言基礎(chǔ)開發(fā)指南上線啦!

    基礎(chǔ)開發(fā)指南為HarmonyOS應(yīng)用開發(fā)者提供了常用的基礎(chǔ)能力: ○ 提供異步并發(fā)和多線程
    發(fā)表于 10-18 16:36

    鴻蒙 OS 應(yīng)用開發(fā)初體驗

    的 IDE、鴻蒙生態(tài)的開發(fā)語言 ArkTS,通過模擬器運行起來了鴻蒙 OS 版 HelloWorld。對于已經(jīng)有移動
    發(fā)表于 11-02 19:38

    鴻蒙OS開發(fā)實例:【ArkTS多線程I/O密集型任務(wù)開發(fā)

    使用異步并發(fā)可以解決單次I/O任務(wù)阻塞的問題,但是如果遇到I/O密集型任務(wù),同樣會阻塞線程中其它任務(wù)的執(zhí)行,這時需要使用多線程并發(fā)能力來進行解決。 I/O密集型任務(wù)的性能重點通常不在于CPU
    的頭像 發(fā)表于 04-01 16:32 ?443次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b>多線程I/O密集型任務(wù)<b class='flag-5'>開發(fā)</b>】

    鴻蒙OS開發(fā)實例:【ArkTS多線程@Concurrent裝飾器校驗并發(fā)函數(shù)】

    在使用TaskPool時,執(zhí)行的并發(fā)函數(shù)需要使用該裝飾器修飾,否則無法通過相關(guān)校驗。從API version 9開始,該裝飾器支持在ArkTS卡片中使用。
    的頭像 發(fā)表于 04-02 14:45 ?567次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b>多線程@Concurrent裝飾器校驗<b class='flag-5'>并發(fā)</b>函數(shù)】

    鴻蒙OS開發(fā)實例:【ArkTS異步并發(fā)async/await】

    async/await是一種用于處理異步操作的Promise語法糖,使得編寫異步代碼變得更加簡單和易讀。通過使用async關(guān)鍵字聲明一個函數(shù)為異步函數(shù),并使用await關(guān)鍵字等待
    的頭像 發(fā)表于 04-02 20:57 ?931次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>異步</b><b class='flag-5'>并發(fā)</b>async/await】

    鴻蒙OS開發(fā)實例:【ArkTS單次I/O任務(wù)開發(fā)

    Promise和async/await提供異步并發(fā)能力,適用于單次I/O任務(wù)的場景開發(fā),本文以使用異步進行單次文件寫入為例來提供指導(dǎo)。
    的頭像 發(fā)表于 04-02 21:03 ?284次閱讀
    <b class='flag-5'>鴻蒙</b>原<b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b>單次I/O任務(wù)<b class='flag-5'>開發(fā)</b>】