什麼是promise:異步編程代碼的一種方式
let p = new Promise((resolve, reject) => {
// 作一些事情
// 而後在某些條件下resolve,或者reject
if (/* 條件隨便寫^_^ */) {
resolve()
} else {
reject()
}
})
p.then(() => {
// 若是p的狀態被resolve了,就進入這裏
}, () => {
// 若是p的狀態被reject
})
調用.then能夠爲實例p註冊兩種狀態回調函數
當實例p的狀態爲fulfilled,會觸發第一個函數執行
當實例p的狀態爲rejected,則觸發第二個函數執行
promise的做用:
如今假設有多個異步任務,且任務間有依賴關係(一個任務須要拿到另外一個任務成功後的結果才能開始執行)的時候,回調的方式寫出來的代碼就會像下面這樣:
getData1(data1 => {
getData2(data1, data2 => {
getData3(data2, data3 => {
getData4(data3, data4 => {
getData5(data4, data5 => {
// 終於取到data5了
})
})
})
})
})
promise改寫一下:
getData1()
.then(getData2)
.then(getData3)
.then(getData4)
.then(getData5)
.then(data => {
// 取到最終data了
})
3種狀態:
promise實例有三種狀態:
pending(待定)
fulfilled(已執行)
rejected(已拒絕)
promise的內容分爲構造函數、實例方法和靜態方法
1個構造函數: new Promise
2個實例方法:.then 和 .catch
4個靜態方法:Promise.all、Promise.race、Promise.resolve和Promise.reject
複製代碼