Promise的用法


promise.then()、promise.catch()、Promise.all()、、、

Promise 構造函數接受一個函數作為參數,該函數的2個參數分別是 resolve 和 reject。他們是2個函數,有 JavaScript 引擎提供,不用自己部署。

var promise = new Promise ( function ( resolve, reject) {
    if ( /* 異步操作成功 */ ) {
        resolve (value)
    } else {
        reject (error)             
    }
})

如果調用 resolve 函數和 reject 函數時帶有參數,那么這些參數會被傳遞給回調函數。

Promise 實例生成以后,可以用 then 方法分別指定 Resolved 狀態和 Rejected 狀態的回調函數(then 方法的作用是為 Promise 實例添加狀態改變時的回調函數)。

promise.then( function (value) {
    // success
}, function (value) {
    // failure
})

Promise 對象的錯誤具有“冒泡”性質,會一直向后傳遞,直到被捕獲為止。也就是說,錯誤總是會被下一個 catch 語句捕獲。注意:因此無法知道錯誤是哪個Promise產生的,除非設置了不一樣的錯誤提示。 

一般,不要在 then 方法中定義 Rejected 狀態的回調函數(即 then 的第二個參數),而應該總是使用 catch。

如果沒有使用 catch 方法指定錯誤處理的回調函數,Promise 對象拋出的錯誤不會傳遞到外層代碼,即不會有任何反應。

catch 方法返回的還是一個 Promise 對象,因此還可以接着調用 then 方法。

如果沒有報錯,則會跳過 catch 方法,繼續執行后面的 then 方法(如果后面還有 then 方法的話)。

getJson ('/post/1.json').then ( function (post) {
    return getJson(post.commentURL)
}).then ( function (comments) {
    // some code 
}).catch ( function (error) {
    // 處理前面3個 Promise 產生的錯誤
})

var p = Promise.all([p1, p2, p3])

p的狀態有 p1、p2、p3 決定,分成2種情況:

1. 只有 p1、p2、p3 的狀態都變成 Fulfilled,p 的狀態才會變成 Fulfilled,此時  p1、p2、p3 的返回值組成一個數組,傳遞給 p 的回調函數。

2. 只要 p1、p2、p3 中有一個被 Rejected,p 的狀態就變成 Rejected,此時第一個被 Rejected 的實例的返回值會傳遞給 p 的回調函數。 

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM