ES6中提出的一個規范 Promise,常用於處理各種異步操作帶來的回調地獄
但是大量地進行 Promise 的鏈式調用, 以及復雜的業務邏輯, 又會帶來的新的問題,經過一股腦地 Promise...then.. 最后的狀態及值分別是什么?
在這里將它分為兩種情況:
1. then 里面對 Promise 的相關結果進行了對應的處理,例:
const success = new Promise((resolve, reject) => {
resolve(1)
})
.then(res => {
// 處理 resolve
})
const fail = new Promise((resolve, reject) => {
reject(1)
})
.then(null, res => {
// 處理 reject
})
對於這種情況, 若處理函數執行過程不報錯:
則最后的狀態為 fulfilled,值為處理函數的返回值( 若返回值為 Promise 對象,則最后的狀態及值與這個 Promise 對象保持一致 );
若執行過程報錯:
則狀態為 rejected,值為報錯原因;
2. 未對 Promise 的相關結果進行對應處理,例:
const success = new Promise((resolve, reject) => {
resolve(1)
})
.then(null, res => {
// 處理 reject
})
const fail = new Promise((resolve, reject) => {
reject(1)
})
.then(res => {
// 處理 resolve
})
對於這種情況,直接忽略 .then 內的代碼,最后的狀態和值與 new Promise(xxx) 的狀態和值一致
由此可發現,當對 Promise 的結果進行了相應處理的時候,只需關注這個處理過程是否完成,完成則說明這次 Promise 成功,整個狀態為 fulfilled,並將值接力下去,未對 Promise 結果處理時,then 內不執行,最后狀態和結果不變。