1. Promise
- ES6中對於異步編程提供的一種解決方案,解決的回調地獄的問題
- Promise對象實例的兩個參數,resolve和reject
- resolve函數: 異步操做成功時的調用,並將異步操做的結果,做爲參數傳遞出去
- reject函數: 異步操做失敗時的調用,並將異步操做報出的錯誤,做爲參數傳遞出去
- promise對象實例的方法,then和catch
- .then方法: 成功時的回調函數,此方法返回的是一個新的promise實例,能夠採用鏈式寫法,.then方法後面能夠繼續調用.then方法
- .catch方法: 錯誤時的回調函數
2. Promise鏈式調用
- 由於每次調用後都會返回一個Promise對象
- Promise.then()和.catch()每次返回不一樣的新對象,全部並不全等,但鏈式調用.then()會繼承上一級的Promise對象
3. Promise.all()
- Promise.all能夠接受一個元素爲Promise對象的數組做爲參數,當這個數組裏面全部的Promise對象都變爲resolve時,該方法纔會返回,返回的結果是一個數組
var p1 = new Promise(function(resolve){
setTimeout(function(){
resolve(1);
},3000);
});
var p2 = new Promise(function(resolve){
setTimeout(function(){
resolve(2);
},1000);
});
Promise.all([p1, p2]).then(function(value){
console.log(value); // [1,2]
});
複製代碼
- 在Promise.all方法中會按照數組的原先順序將結果返回,不會按照時間順序
- 此方法的好處:在請求數據的過程當中,偶爾會遇到發送多個請求並根據請求順序獲取和使用數據的場景,使用Promise.all能夠解決這個問題
4. Promise.race()
- 能夠理解爲賽跑的意思,意思就是說Promise.race([p1, p2, p3])裏面哪一個結果得到的快,就返回那個結果,無論結果自己是成功狀態仍是失敗狀態
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
},1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('failed')
}, 500)
})
Promise.race([p1, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error) // 'failed'
})
複製代碼