談談你對Promise的理解
- 2022 年 8 月 20 日
- 筆記
- javascript
一、Promise是什麼?
-
理解
-
抽象表達:
-
Promise 是一門新的技術(ES6 規範)
-
Promise 是 JS 中進行異步編程的新解決方案(備註:舊方案是單純使用回調函數)
-
-
具體表達:
-
從語法上來說: Promise 是一個構造函數
-
從功能上來說: promise 對象用來封裝一個異步操作並可以獲取其成功/失敗的結果值
-
-
-
promise 的狀態改變
-
pending 變為 resolved
-
pending 變為 rejected
-
說明: 只有這 2 種, 且一個 promise 對象只能改變一次無論變為成功還是失敗, 都會有一個結果數據,成功的結果數據一般稱為 value, 失敗的結果數據一般稱為 reason。
-
二、Promise 構造函數的基本用法
const p = new Promise((resolve, reject) => { if (...) { // succeed resolve(result); } else { // fails reject(Error(errMessage)); } }); p.then(value => { console.log(value.toString()) },reason => { console.log(reason) })
三、為什麼要用Promise?
-
指定回調函數的方式更加靈活
-
舊的: 必須在啟動異步任務前指定
-
promise: 啟動異步任務 => 返回 promie 對象 => 給 promise 對象綁定回調函數(甚至可以在異步任務結束後指定多個)
-
-
支持鏈式調用, 可以解決回調地獄問題
-
什麼是回調地獄?
-
回調函數嵌套調用, 外部回調函數異步執行的結果是嵌套的回調執行的條件,格式上不斷地進行縮進。
-
-
回調地獄的缺點?
-
不便於閱讀
-
不便於異常處理
-
-
解決方案?
-
promise 鏈式調用
-
-
終極解決方案?
-
async/await
-
-