Promise
1、怎么使用Promise
//記好:
return new Promise((resolve,reject)=>{.......})
任務(wù)成功調(diào)用 resolve(result)
任務(wù)失敗調(diào)用 reject(error)
resolve 和 reject 會(huì)再去調(diào)用成功和失敗的函數(shù)
2、Promise的用途
讓你的代碼規(guī)范,防止回調(diào)地獄,可以捕獲錯(cuò)誤
Promise是前端解決異步問(wèn)題的統(tǒng)一方案
3、如何使用 Promise.prototype.then
MDN的解釋?zhuān)?code>then() 方法返回一個(gè) Promise (en-US)。它最多需要有兩個(gè)參數(shù):Promise 的成功和失敗情況的回調(diào)函數(shù)。
自己的理解: .then是一種鏈?zhǔn)讲僮?,可以多次調(diào)用: 使用then方法之后會(huì)返回一個(gè)promise對(duì)象,可以繼續(xù)用then方法調(diào)用,再次調(diào)用所獲取的參數(shù)是上個(gè)then方法return的內(nèi)容。
// 創(chuàng)建一個(gè)promise
let promise = new Promise((resolve, reject) => {
// 做一些事情(進(jìn)行狀態(tài))
if (/*當(dāng)滿足某個(gè)條件*/) {
resolve(一些數(shù)據(jù)) // 調(diào)用resolve函數(shù) (由進(jìn)行轉(zhuǎn)變到成功狀態(tài))
} else(/*即不滿足條件*/){
reject(錯(cuò)誤) // 調(diào)用rejected函數(shù)(由進(jìn)行轉(zhuǎn)變到失敗狀態(tài))
}
})
// 使用這個(gè)promise
promise.then((一些數(shù)據(jù)) => {
// 這里寫(xiě)resolve函數(shù)的具體實(shí)現(xiàn)
}, (錯(cuò)誤) => {
// 這里寫(xiě)reject函數(shù)的具體實(shí)現(xiàn)
})
4、如何使用 Promise.all
MDN給出的解釋是:Promise.all() 方法接收一個(gè)promise的iterable類(lèi)型(注:Array,Map,Set都屬于ES6的iterable類(lèi)型)的輸入,并且只返回一個(gè)Promise實(shí)例, 那個(gè)輸入的所有promise的resolve回調(diào)的結(jié)果是一個(gè)數(shù)組。這個(gè)Promise的resolve回調(diào)執(zhí)行是在所有輸入的promise的resolve回調(diào)都結(jié)束,或者輸入的iterable里沒(méi)有promise了的時(shí)候。它的reject回調(diào)執(zhí)行是,只要任何一個(gè)輸入的promise的reject回調(diào)執(zhí)行或者輸入不合法的promise就會(huì)立即拋出錯(cuò)誤,并且reject的是第一個(gè)拋出的錯(cuò)誤信息。
我的解析就是: Promise.all() 其實(shí)是將多個(gè)Promise放在一個(gè)數(shù)組中,當(dāng)整個(gè)數(shù)組的全部promise成功時(shí)才會(huì)返回成功,當(dāng)數(shù)組中的promise有一個(gè)出現(xiàn)失敗時(shí)就返回失敗 (失敗的原因是第一個(gè)失敗promise的結(jié)果)。
Promise.all([promise1, promise2]).then(resolve, reject)
// 只有當(dāng)promise1和promise2都成功時(shí)才會(huì)調(diào)用resolve
// 有一個(gè)promise失敗都會(huì)調(diào)用reject
5、 如何使用 Promise.race
MDN解釋?zhuān)?Promise.race(iterable) 方法返回一個(gè) promise,一旦迭代器中的某個(gè)promise解決或拒絕,返回的 promise就會(huì)解決或拒絕。
我的解析: Promise.race(iterable),其實(shí)就是將多個(gè)Promise放在一個(gè)數(shù)組中,數(shù)組中有一個(gè)promise最先得到結(jié)果,不管是" 完成(resolve)"還是" 失?。╮eject)" , 那么
這個(gè) .race 的方法就會(huì)返回這個(gè)結(jié)果。
Promise.race([promise1, promise2]).then(resolve, reject)
// promise1和promise2只要有一個(gè)成功就會(huì)調(diào)用resolve;
// promise1和promise2只要有一個(gè)失敗就會(huì)調(diào)用reject;
// 總結(jié): 誰(shuí)第一個(gè)成功或失敗,就認(rèn)為是race的成功或失敗。