Promise和async/await提供異步并發能力,是標準的JS異步語法。異步代碼會被掛起并在之后繼續執行,同一時間只有一段代碼執行,適用于單次I/O任務的場景開發,例如一次網絡請求、一次文件讀寫等操作。異步語法是一種編程語言的特性,允許程序在執行某些操作時不必等待其完成,而是可以繼續執行其他操作。
Promise是一種用于處理異步操作的對象,可以將異步操作轉換為類似于同步操作的風格,以方便代碼編寫和維護。Promise提供了一個狀態機制來管理異步操作的不同階段,并提供了一些方法來注冊回調函數以處理異步操作的成功或失敗的結果。
Promise有三種狀態:pending(進行中)、fulfilled(已完成)和rejected(已拒絕)。Promise對象創建后處于pending狀態,并在異步操作完成后轉換為fulfilled或rejected狀態。
最基本的用法是通過構造函數實例化一個Promise對象,同時傳入一個帶有兩個參數的函數,通常稱為executor函數。executor函數接收兩個參數:resolve和reject,分別表示異步操作成功和失敗時的回調函數。例如,以下代碼創建了一個Promise對象并模擬了一個異步操作
setTimeout(() = > {
const randomNumber = Math.random();
if (randomNumber > 0.5) {
resolve(randomNumber);
} else {
reject(new Error('Random number is too small'));
}
}, 1000);
});
});
上述代碼中,setTimeout函數模擬了一個異步操作,并在1秒鐘后隨機生成一個數字。如果隨機數大于0.5,則執行resolve回調函數并將隨機數作為參數傳遞;否則執行reject回調函數并傳遞一個錯誤對象作為參數。
Promise對象創建后,可以使用then方法和catch方法指定fulfilled狀態和rejected狀態的回調函數。then方法可接受兩個參數,一個處理fulfilled狀態的函數,另一個處理rejected狀態的函數。只傳一個參數則表示狀態改變就執行,不區分狀態結果。使用catch方法注冊一個回調函數,用于處理“失敗”的結果,即捕獲Promise的狀態改變為rejected狀態或操作失敗拋出的異常。例如:
promise.then(result = > {
console.info(`Random number is ${result}`);
}).catch(error = > {
console.error(error.message);
});
上述代碼中,then方法的回調函數接收Promise對象的成功結果作為參數,并將其輸出到控制臺上。如果Promise對象進入rejected狀態,則catch方法的回調函數接收錯誤對象作為參數,并將其輸出到控制臺上。
審核編輯 黃宇
-
鴻蒙
+關注
關注
57文章
2313瀏覽量
42747 -
鴻蒙OS
+關注
關注
0文章
188瀏覽量
4371
發布評論請先 登錄
相關推薦
評論