? ? ? 相信很多倒霉孩子用過Promise烤宙,不管是ng的還是node里面的蔼紧,但是那些或多或少都是封裝的,現(xiàn)在我們說一下ES6提供的原生的Promise宰啦,簡單來說苏遥,Promise就是一個對象保存著一個未來才會結(jié)束的事件,然后會返回給你API赡模,方便給你這個事件以什么結(jié)果結(jié)束的處理田炭。promise對象的狀態(tài)不受外界影響,指根據(jù)它內(nèi)部的那個事件或者異步操作改變而改變漓柑,它包含三個狀態(tài):pending(進(jìn)行中)教硫、fulfilled(已成功)、rejected(已失敗);它的狀態(tài)變化只能是 pending==》fulfilled和pending==》rejected欺缘,而且狀態(tài)改變了就不能再變化栋豫,就會進(jìn)行結(jié)果輸出挤安。
? ? ? ?ES6原生的Promise對象是個構(gòu)造函數(shù)用來生成實例谚殊,并且會在新建之后立即執(zhí)行,promise = new Promise(function(resolve,reject))其中resolve是將promise中的異步操作轉(zhuǎn)換成fulfilled狀態(tài)并將結(jié)果作為參數(shù)傳遞出去蛤铜,reject是將promise中的異步操作轉(zhuǎn)換成rejected狀態(tài)并將結(jié)果作為參數(shù)傳遞出去嫩絮。其實例對象方法,promise.then接受兩個回調(diào)函數(shù)做參數(shù)表示異步操作的成功和失敗的處理围肥,可以做鏈?zhǔn)讲僮鹘烁桑籶romise.catch指定發(fā)生錯誤時的回調(diào)函數(shù),并且其中產(chǎn)生的錯誤如果不被catch會一直傳遞直到被catch穆刻;Promise.all([arr])類似與$q.all([arr])同時處理多個promise的實例置尔,只有promise都fulfilled才會返回fulfilled否則返回rejected;Promise.race([arr])只要arr中的任何一個promise實例狀態(tài)改變那么整個的狀態(tài)都會改變氢伟,并且它的返回值是最先改變狀態(tài)的那個實例的返回榜轿;Promise.resolve(obj)將obj轉(zhuǎn)化成promise實例對象且狀態(tài)是fulfilled幽歼,如果obj是一個promise對象且then方法齊全,那就直接執(zhí)行then方法谬盐;Promise.reject(obj)返回一個promise對象且狀態(tài)是rejected甸私,并且obj會成為reject的參數(shù)(即失敗的錯誤);promise.done()總是出現(xiàn)在回調(diào)鏈的尾端,保證拋出任何可能的錯誤飞傀;promise.finally()表示不管最后promise的狀態(tài)是啥都要執(zhí)行的操作皇型。
? ? ? 反正可以看作基于ng和node里面的promise方法的拓展,反正寫的話方法很亂砸烦。