new Promise( /* executor */ function(resolve, reject) { ... } );
Promise的構造函數接收一個函數做爲參數,函數裏面傳入兩個參數:resolve,reject,分別表示異步操做執行成功後的回調函數和異步操做執行失敗後的回調函數。其實這裏用「成功」和「失敗」來描述並不許確,按照標準來說,resolve是將Promise的狀態置爲fullfiled,reject是將Promise的狀態置爲rejected。以下node
function aysnloop(){var p = new Promise(function(resolve, reject){setTimeout(function(){console.log('hello');resolve()},100);});return p;}es6
Promise 有什麼用呢?爲何那麼火呢?爲何會被歸入到es6裏面呢?異步
來來來,咱們把上面的咧子多拷貝兩份函數
function aysnloop1(){var p = new Promise(function(resolve, reject){setTimeout(function(){console.log('good');resolve('good')},100);});return p;}oop
function aysnloop2(){var p = new Promise(function(resolve, reject){setTimeout(function(){console.log('mans');resolve('man');},100);});return p;}code
再用下面代碼打印看看:文檔
aysnloop().then(function(data){console.log('123');return aysnloop1();}).then(function(){console.log(456);return aysnloop2();}).then(function(data){console.log(789)})回調函數
是否是明白了?io
沒錯,異步回調函數的解決方案,著名的node 死鎖問題都得能夠用他解決。console
把原來的回調寫法分離出來,在異步操做執行完後,用鏈式調用的方式執行回調函數。
附加官方文檔,簡單粗暴。