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