定義
在JavaScript的世界中,所有代碼都是單線程執(zhí)行的劫流。 由于這個“缺陷”祠汇,導致JavaScript的所有網(wǎng)絡請求熄诡,事件凰浮,都是異步執(zhí)行.
Promise 對象是一個代理對象(代理一個值)袜茧,被代理的值在Promise對象創(chuàng)建時可能是未知的。它允許你為異步操作的成功和失敗分別綁定相應的處理方法(handlers)纳鼎。 這讓異步方法可以像同步方法那樣返回值贱鄙,但并不是立即返回最終執(zhí)行結(jié)果姨谷,而是一個能代表未來出現(xiàn)的結(jié)果的promise對象一個 Promise有以下幾種狀態(tài):?
1. pending: 初始狀態(tài)梦湘,既不是成功践叠,也不是失敗狀態(tài)禁灼。
2. fulfilled: 意味著操作成功完成。
3. rejected: 意味著操作失敗僻孝。
promise的原型鏈(prototype)
Promise.prototype.constructor?返回被創(chuàng)建的實例函數(shù). 默認為 Promise 函數(shù).
Promise.prototype.catch(onRejected)?添加一個拒絕(rejection) 回調(diào)到當前 promise, 返回一個新的promise穿铆。當這個回調(diào)函數(shù)被調(diào)用荞雏,新 promise 將以它的返回值來resolve凤优,否則如果當前promise 進入fulfilled狀態(tài),則以當前promise的完成結(jié)果作為新promise的完成結(jié)果.
Promise.prototype.then(onFulfilled, onRejected)?添加解決(fulfillment)和拒絕(rejection)回調(diào)到當前 promise, 返回一個新的 promise, 將以回調(diào)的返回值來resolve.
Promise.prototype.finally(onFinally)?添加一個事件處理回調(diào)于當前promise對象,并且在原promise對象解析完畢后暮现,返回一個新的promise對象栖袋《拜回調(diào)會在當前promise運行完畢后被調(diào)用凭舶,無論當前promise的狀態(tài)是完成(fulfilled)還是失敗(rejected)
promise的方法
Promise.all(iterable)?方法返回一個 Promise 實例,此實例在 iterable 參數(shù)內(nèi)所有的 promise 都“完成(resolved)”或參數(shù)中不包含 promise 時回調(diào)完成(resolve)呼伸;如果參數(shù)中 promise 有一個失斃ㄏ怼(rejected),此實例回調(diào)失斒@ⅰ(reject)仁卷,失敗原因的是第一個失敗 promise 的結(jié)果。
Promise.race(iterable)?方法返回一個 promise,一旦迭代器中的某個promise解決或拒絕背蟆,返回的 promise就會解決或拒絕淆储。
Promise.reject(reason)?方法返回一個帶有拒絕原因reason參數(shù)的Promise對象
參考與:阮一峰ES6