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對象并模擬了一個異步操作
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ù),并將其輸出到控制臺上。
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
57文章
2305瀏覽量
42697 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
188瀏覽量
4360
發(fā)布評論請先 登錄
相關(guān)推薦
評論