? ? ? 相信很多倒霉孩子用過Promise,不管是ng的還是node里面的,但是那些或多或少都是封裝的,現在我們說一下ES6提供的原生的Promise,簡單來說,Promise就是一個對象保存著一個未來才會結束的事件,然后會返回給你API,方便給你這個事件以什么結果結束的處理。promise對象的狀態不受外界影響,指根據它內部的那個事件或者異步操作改變而改變,它包含三個狀態:pending(進行中)、fulfilled(已成功)、rejected(已失敗);它的狀態變化只能是 pending==》fulfilled和pending==》rejected,而且狀態改變了就不能再變化,就會進行結果輸出。
? ? ? ?ES6原生的Promise對象是個構造函數用來生成實例,并且會在新建之后立即執行,promise = new Promise(function(resolve,reject))其中resolve是將promise中的異步操作轉換成fulfilled狀態并將結果作為參數傳遞出去,reject是將promise中的異步操作轉換成rejected狀態并將結果作為參數傳遞出去。其實例對象方法,promise.then接受兩個回調函數做參數表示異步操作的成功和失敗的處理,可以做鏈式操作;promise.catch指定發生錯誤時的回調函數,并且其中產生的錯誤如果不被catch會一直傳遞直到被catch;Promise.all([arr])類似與$q.all([arr])同時處理多個promise的實例,只有promise都fulfilled才會返回fulfilled否則返回rejected;Promise.race([arr])只要arr中的任何一個promise實例狀態改變那么整個的狀態都會改變,并且它的返回值是最先改變狀態的那個實例的返回;Promise.resolve(obj)將obj轉化成promise實例對象且狀態是fulfilled,如果obj是一個promise對象且then方法齊全,那就直接執行then方法;Promise.reject(obj)返回一個promise對象且狀態是rejected,并且obj會成為reject的參數(即失敗的錯誤);promise.done()總是出現在回調鏈的尾端,保證拋出任何可能的錯誤;promise.finally()表示不管最后promise的狀態是啥都要執行的操作。
? ? ? 反正可以看作基于ng和node里面的promise方法的拓展,反正寫的話方法很亂。