ES6中的Promise

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'
    })
    複製代碼
相關文章
相關標籤/搜索