【node.js】promise對象詳細解析

promise

爲了解決回調地獄問題,在ES6中提供了Promise

Promise實際上就是在原本的異步API上面包裹一層函數,其中Promise參數函數的resolve , reject兩個參數,實際上和普通的回調函數一樣,都接受一個回調函數作爲實參,而在運行時返回一個實參給調用他的then或catch兩個回調函數,這樣就會獲得異步API中的執行結果

而這個包裹的一層函數就是promise對象

let promise = new Promise((resolve, reject) => {
    setTimeout(() => {
        if (true) {
            resolve({name: '張三'})
        }else {
            reject('失敗了') 
        } 
    }, 2000);
});
promise.then(result => console.log(result); // {name: '張三'})
       .catch(error => console.log(error); // 失敗了)

而且promise還可以鏈式調用
Promise 的鏈式調用是通過 .then() 和 .catch() 方法實現的,其中 .catch() 等價於 .then(null, onRejected),因此我們在接下來的內容當中只需研究 .then() 方法的性質即可。

.then() 方法除了用於註冊監聽函數之外,本身也會創建並返回一個 Promise 對象,這個 Promise 對象用於表徵回調函數的執行情況。
當回調函數執行成功時(內部的resolve函數調用) Promise 狀態將變更爲 ‘fulfilled’,執行過程拋出異常 (內部的rejected函數調用)Promise 狀態則變成 ‘rejected’

透傳

在鏈式調用過程當中,假如某個環節的 Promise 不存在相應狀態的監聽回調函數,那麼這個 Promise 的狀態將會往下透傳
即,Promise中回調函數執行,卻沒有相應的then()或catch()處理,所以會將上一個 Promise 的狀態持續透傳了下去。

Promise 值傳遞

.then() 方法會將回調函數的執行結果(then中回調函數的return)記錄下來,並作爲下一個 onFulfilled 回調的參數將其傳遞下去
由於回調函數可以返回任何結果,甚至返回一個 Promise 對象也是可行的。
回調函數所拋出的錯誤將作爲下一個 onRejected 的參數傳遞下去

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章