簡單的理解,promise/defer是利用發佈訂閱模式實現的異步編程模型。Promise和Defer是兩個構造函數。編程
Promise繼承了事件對象Events,原型對象上有方法then。then的執行是事件註冊的過程,包括註冊成功回調,失敗回調及progress回調。promise
Defer用於控制異步請求狀態。實例化Defer對象時,會爲之添加一個屬性promise,該屬性是Promise的實例。Defer的原型對象上有方法resolve和reject等。網絡
通常用異步編程實現的網絡請求中,咱們在業務層面調用一個實現網絡請求的service服務。在service服務中,首先建立一個Defer實例,而後立刻返回Defer實例的promise對象。業務層面,經過調用該promise對象的then方法註冊監聽事件。當網絡請求成功或失敗後,調用defer.reject或者defer.resolve。調用這兩個方法,會執行經過promise對象註冊的成功或失敗的回調。異步