Promise 是 CommonJS 中的規(guī)范,它能夠幫助我們控制代碼流程,避免函數(shù)的多層嵌套。現(xiàn)在 Web 前端異步編程越來越普遍,它的出現(xiàn)讓異步編程變得更佳的容易理解。由于它越來越受到重視,ES6 已經(jīng)開始支持它了。
什么是 Promise?
Promise 是一種異步編程的模型。它有三種狀態(tài):pending、resolved 和 rejected;一個(gè) Promise 的狀態(tài)只可能從 pending 轉(zhuǎn)到 resolved 或者 rejected,不能逆向轉(zhuǎn)換;同時(shí) resolved 和 rejected 狀態(tài)是不能相互轉(zhuǎn)換的。
Promise 必須實(shí)現(xiàn) then 方法,then 方法可以接受兩個(gè)回調(diào)函數(shù),第一個(gè)是操作成功時(shí)(狀態(tài)變?yōu)?resolved)的回調(diào),第二個(gè)是操作失敗時(shí)(狀態(tài)變?yōu)?rejected)的回調(diào)。
Promise 的優(yōu)缺點(diǎn):
- [優(yōu)勢]在異步編程中即保證代碼簡潔(避免嵌套),又讓代碼有異步運(yùn)行的能力;
- [缺點(diǎn)]無法取消 Promise,一旦新建它就會(huì)立即執(zhí)行,無法中途取消;
- [缺點(diǎn)]如果不設(shè)置回調(diào)函數(shù),Promise 內(nèi)部拋出的錯(cuò)誤,不會(huì)反應(yīng)到外部;
- [缺點(diǎn)]當(dāng)處于 Pending 狀態(tài)時(shí),無法得知目前進(jìn)展到哪一個(gè)階段;
ES6 中的 Promise
Promise.prototype.then()
then 方法返回的是一個(gè)新的 Promise 實(shí)例,但是它并不是原來那個(gè) Promise 實(shí)例。這樣就可以采用鏈?zhǔn)降膶懛ǎ?then 方法后面在調(diào)用另外一個(gè) then。
Promise.prototype.catch()
catch 方法是指發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù):
Promise.all()
all 方法用于將多個(gè) Promise 實(shí)例,包裝成一個(gè)新的 Promise 實(shí)例。
Promise.race()
race 方法同樣是將多個(gè) Promise 實(shí)例,包裝成一個(gè)新的 Promise 實(shí)例。
Promise.resolve()
Promise.reject()
done()
finally()






