es6 Promise物件
阿新 • • 發佈:2019-01-01
promise 是什麼??
所謂Promise就是一個容器,裡面儲存著某個未來才會結束的事件的結果
從語法上講,promise是一個物件,可以獲取非同步操作的訊息
promise物件的特點
一,物件的狀態不受外界影響
promise物件的3種狀態
1,pending(進行中)
2,fulfiled(已完成)
3,rejected(已失敗)
二,狀態一旦改變 就不會再發生變化,任何時候都是這種結果
Promise怎麼用??
使用建構函式生成promise的例項,接受一個函式作為引數,這個函式的兩個引數分別是resolve和reject
resolve和reject也是函式,由javascript引擎提供,不用自己部署
resolve函式的作用是,將promise物件的狀態由pending變成resolved,在非同步操作成功時呼叫,並將結果作為引數傳遞出去,在then()方法中可以
reject函式的作用是,將promise物件的狀態由pending變成rejected,在非同步操作失敗時呼叫,並將錯誤資訊作為引數傳遞出去
const pro=new Promise(function(resolve,reject){
});
promise例項生成之後,可以在then()方法中,分別指定resolved狀態和rejected狀態的回撥函式
then()方法接受兩個回撥函式作為引數
第一個回撥函式,是狀態變為resolved時呼叫,
第二個回撥函式,是狀態變成rejected時呼叫,第二個回撥函式是可選的
這兩個回撥函式都是接受promise物件傳出的值作為引數
Promise.prototype.then()
Promise例項具有的then()方法,是定義在Promise.prototype這個原型物件上的
then()方法會返回一個新的promise例項,不同於原來的,因此可以使用鏈式呼叫的寫法,
then方法後面再呼叫一個then方法
Promise.prototype.catch()
catch()方法可以處理,promise例項發生的錯誤和then方法產生的錯誤
Promise.all([p1,p2,p3])
all()方法可以接受多個promise例項作為引數,當全部例項狀態變成resolved或者其中一個的狀態變成rejected時,後面的回撥函式才會被呼叫
Promise.resolve()
將一個物件轉為Promise物件,直接返回一個resolved狀態的Promise物件
Promise.reject()
也是講一個物件轉為Promise物件,該例項的狀態為rejected
最後,兩個實用的附加方法
1,done()
Promise.then().catch().done()
可以放在Promise回撥鏈的尾鏈,對於then()方法和catch()方法產生的錯誤進行丟擲
2,finally()
不管Promise物件的狀態如何,最後都會執行的