1. 程式人生 > >es6 Promise物件

es6 Promise物件

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物件的狀態如何,最後都會執行的