Promise和async/await提供異步并發(fā)能力,是標(biāo)準(zhǔn)的JS異步語法。異步代碼會(huì)被掛起并在之后繼續(xù)執(zhí)行,同一時(shí)間只有一段代碼執(zhí)行,適用于單次I/O任務(wù)的場(chǎng)景開發(fā),例如一次網(wǎng)絡(luò)請(qǐng)求、一次文件讀寫等操作。異步語法是一種編程語言的特性,允許程序在執(zhí)行某些操作時(shí)不必等待其完成,而是可以繼續(xù)執(zhí)行其他操作。
Promise是一種用于處理異步操作的對(duì)象,可以將異步操作轉(zhuǎn)換為類似于同步操作的風(fēng)格,以方便代碼編寫和維護(hù)。Promise提供了一個(gè)狀態(tài)機(jī)制來管理異步操作的不同階段,并提供了一些方法來注冊(cè)回調(diào)函數(shù)以處理異步操作的成功或失敗的結(jié)果。
Promise有三種狀態(tài):pending(進(jìn)行中)、fulfilled(已完成)和rejected(已拒絕)。Promise對(duì)象創(chuàng)建后處于pending狀態(tài),并在異步操作完成后轉(zhuǎn)換為fulfilled或rejected狀態(tài)。
最基本的用法是通過構(gòu)造函數(shù)實(shí)例化一個(gè)Promise對(duì)象,同時(shí)傳入一個(gè)帶有兩個(gè)參數(shù)的函數(shù),通常稱為executor函數(shù)。executor函數(shù)接收兩個(gè)參數(shù):resolve和reject,分別表示異步操作成功和失敗時(shí)的回調(diào)函數(shù)。例如,以下代碼創(chuàng)建了一個(gè)Promise對(duì)象并模擬了一個(gè)異步操作
setTimeout(() = > {
const randomNumber = Math.random();
if (randomNumber > 0.5) {
resolve(randomNumber);
} else {
reject(new Error('Random number is too small'));
}
}, 1000);
});
});
上述代碼中,setTimeout函數(shù)模擬了一個(gè)異步操作,并在1秒鐘后隨機(jī)生成一個(gè)數(shù)字。如果隨機(jī)數(shù)大于0.5,則執(zhí)行resolve回調(diào)函數(shù)并將隨機(jī)數(shù)作為參數(shù)傳遞;否則執(zhí)行reject回調(diào)函數(shù)并傳遞一個(gè)錯(cuò)誤對(duì)象作為參數(shù)。
Promise對(duì)象創(chuàng)建后,可以使用then方法和catch方法指定fulfilled狀態(tài)和rejected狀態(tài)的回調(diào)函數(shù)。then方法可接受兩個(gè)參數(shù),一個(gè)處理fulfilled狀態(tài)的函數(shù),另一個(gè)處理rejected狀態(tài)的函數(shù)。只傳一個(gè)參數(shù)則表示狀態(tài)改變就執(zhí)行,不區(qū)分狀態(tài)結(jié)果。使用catch方法注冊(cè)一個(gè)回調(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對(duì)象的成功結(jié)果作為參數(shù),并將其輸出到控制臺(tái)上。如果Promise對(duì)象進(jìn)入rejected狀態(tài),則catch方法的回調(diào)函數(shù)接收錯(cuò)誤對(duì)象作為參數(shù),并將其輸出到控制臺(tái)上。
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
60文章
2617瀏覽量
44031 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
191瀏覽量
4984
發(fā)布評(píng)論請(qǐng)先 登錄
ArkTS語言基礎(chǔ)類庫-解析
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫單次I/O任務(wù)開發(fā)
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫概述
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫異步并發(fā)簡述async/await
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫異步并發(fā)簡述Promise
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)
鴻蒙5開發(fā)寶藏案例分享---應(yīng)用并發(fā)設(shè)計(jì)
HarmonyOS如何使用異步并發(fā)能力進(jìn)行開發(fā)
HarmonyOS語言基礎(chǔ)類庫開發(fā)指南上線啦!
鴻蒙 OS 應(yīng)用開發(fā)初體驗(yàn)
鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程I/O密集型任務(wù)開發(fā)】

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

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

鴻蒙原OS開發(fā)實(shí)例:【ArkTS類庫單次I/O任務(wù)開發(fā)】

評(píng)論