1. 程式人生 > 其它 >Promise(1)

Promise(1)

技術標籤:javascript

ECMAScript 6新增的引用型別Promise,可以通過new操作符例項化,建立Promise時候需要傳入執行器函式作為引數。
Promise有三個狀態:待定(pending),兌現(fulfiled),拒絕(rejected)
待定為Promise最初始的狀態,在這個狀態下Promise可以轉換成兌現或者拒絕的狀態,一旦傳送改變,Promise的狀態就再也不發生改變。
Promise的狀態是私有的,不能直接通過JavaScript檢測到,Promise的狀態也不能被外部的JavaScript程式碼修改。
通過控制執行器函式來控制Promise的狀態,執行器函式主要有兩個職責:初始化Promise的非同步行為和控制狀態的最終轉換。其中控制Promise狀態的轉換是通過呼叫它的兩個函式引數實現的。

這兩個引數是resolve()和reject()。呼叫resolve()會使Promise的狀態變為兌現,呼叫reject()會使Promise的狀態變為拒絕,另外呼叫reject()也會丟擲錯誤
程式碼以及控制檯輸出如下

  <script>
       let p = new Promise((resolve,reject) => {
            console.log('Promise物件已經初始化')
            resolve(1)
        })
        console.log(p)
        let p2 = Promise.
resolve(2) console.log(p2) //以上程式碼效果等同 //resolve如果傳入引數為Promise物件,那它的行為類似一個空包裝 //所以以下兩行程式碼效果相等 let p3 = Promise.resolve(3) console.log(p3===Promise.resolve(p3)) //Promise.reject()接受一個引數,該引數為拒絕Promise的理由 //但沒有照搬Promise.resolve的冪等邏輯 //如果傳入一個Promise物件則該物件為拒絕Promise的理由
let p4 = Promise.reject(4) console.log(p4) let p5 = Promise.reject(p4) console.log(p5)
</script>

在這裡插入圖片描述