Promise: 許諾
用來創(chuàng)建promise對象的構造函數(shù): function Promise (excutor) {} 簡潔描述: 一個promise對象用來表示一個異步操作的最終狀態(tài)(完成或失敗),以及該異步操作的結果值 詳細描述: Promise 對象是一個代理對象(代理一個值),被代理的值在Promise對象創(chuàng)建時是未知的。 它允許你為異步操作的成功和失敗分別綁定相應的處理回調函數(shù) 這讓異步方法可以像同步方法那樣返回值,但并不是立即返回最終執(zhí)行結果,而是一個能代表未來出現(xiàn)的結果的promise對象 promise對象的3種狀態(tài)值 pending(未決定的): 初始狀態(tài),既不是成功,也不是失敗狀態(tài)。 resolved/fulfilled(完成的): 意味著操作成功完成。 rejected(拒絕的): 意味著操作失敗。 promise對象的狀態(tài)變化(2種) pending ==> resolved: 調用resolve() pending ==> rejected: 調用reject() 注意: promise的狀態(tài)確定后就不可再轉換為其它狀態(tài) promise對象內部隱藏的屬性 [[PromiseStatus]]: 內部變量, 存儲promise對象當前的狀態(tài)值 [[PromiseValue]]: 內部變量, 存儲成功后的value或失敗后的reason
2). excutor: 執(zhí)行器
executor是帶有 resolve 和 reject 兩個參數(shù)的函數(shù): (resolve, reject) => {} 由我們定義, 在new Promise()內部會立即同步調用 executor 函數(shù)(不是我們調用的) 異步操作的代碼應該在此函數(shù)中執(zhí)行, 一般成功后調用resolve(), 失敗后調用reject()
3). resolve: 解決
由Promise函數(shù)內部定義, 但由我們調用的函數(shù) 當異步任務成功時, 我們應該調用resolve函數(shù), 并傳入需要的value resolve函數(shù)內部: 同步修改promise對象的狀態(tài)為resolved和保存成功value, 異步執(zhí)行已經(jīng)存儲的所有onFulfilled回調函數(shù)
4). reject: 拒絕
由Promise函數(shù)內部定義, 但由我們調用的函數(shù) 當異步任務失敗/拋出error時, 我們應該調用reject函數(shù), 并傳入需要的reason reject函數(shù)內部: 同步修改promise對象的狀態(tài)為rejected和保存失敗reason 異步調用已經(jīng)存儲的所有onRejected回調函數(shù)
5). then: 接著
promise對象的方法: then(onRsolved函數(shù), onRejected函數(shù)), 返回值為一個新的promise對象 作用: 用來指定promise的狀態(tài)為resolved或rejected時的回調函數(shù) 注意: then()方法的返回值為新的promise對象, 這樣可以進行.then()的鏈式調用 返回的promise的結果狀態(tài)和值由回調函數(shù)的結果決定
6). onResolved: 當已解決時
由then()的第一個參數(shù)指定的回調函數(shù): (value) => {} 當promise的狀態(tài)為resolved時自動異步調用 onResolved函數(shù)的返回值: 新的promise對象 其它或不返回
7). onRejected: 當已拒絕時
由then()的第二個參數(shù)或catch()指定的回調函數(shù): (reason) => {} 當promise的狀態(tài)為rejected時自動異步調用 onRejected函數(shù)的返回值: 新的promise對象 其它或不返回
8). catch: 捕獲
promise對象的方法: catch(onRejected函數(shù)) 是then()的語法糖方法, 相當于: then(null, onRejected函數(shù))
9). Promise.resolve()
手動創(chuàng)建一個已經(jīng)resolve的promise的快捷方法: Promise.resolve(value/promise) 如果參數(shù)為promise: 讀取此promise結果值作為返回promise的結果值
10). Promise.reject() 用得很少
手動創(chuàng)建一個已經(jīng)reject的promise的快捷方法: Promise.reject(reason)
11). Promise.all([p1, p2, p3])
用來實現(xiàn)批量執(zhí)行多個promise的異步操作, 返回一個新的promise: Promise.all([promise1, promise2, ...]) 只有當所有異步操作都resolved后, 返回的promise才會變?yōu)閞esolved狀態(tài), 只要有一個變?yōu)閞ejected, 返回的promise直接變?yōu)閞ejected 面試題: 實現(xiàn)一次發(fā)多個請求, 只有都成功后才去做處理?