Promise是JavaScript中的一種異步編程範式, 一個Promise對象表示一個即將完成但還未完成的操做。 鑑於JavaScript中異步和回調的編程風格, Promise模式能夠有效地避免『Callback Hell』。npm
Promise 最初有q和bluebird等實現,在ES2015(ES6)提出後Promise已經進入標準,Node.js已經開始支持ES6的不少特性,包括Promise。編程
傳入一個回調函數便可初始化一個Promise對象padmin
:數組
var padmin = new Promise(function(resolve, reject){ user.find({role: 'admin'}, function(err, admins){ if(err) reject(err); else resolve(admins); }); });
除此以外,ES6還給出4種經常使用的初始化方式,下列方法均返回一個Promise對象:promise
方法 | 說明 |
---|---|
Promise.all(iterable) |
當iterable (好比數組)中全部Promise都resolve 時,該Promiseresolve ;iterable 中任何一個被reject ,則該Promise被reject |
Promise.race(iterable) |
當iterable 中任意一個Promise被resolve 或reject ,該Promise都會相應地結束 |
Promise.reject(err) |
直接返回一個被reject 的Promise對象 |
Promise.reject(value) |
直接返回一個被resolve 的Promise對象 |
Promise對象padmin
擁有兩個主要方法:異步
方法 | 說明 |
---|---|
Promise.prototype.catch(onRejected) |
當一個Promise被reject 時調用onRejected |
Promise.prototype.then(onFulfilled, onRejected) |
當一個Promise被resolve時調用onFulfilled ,被reject 時調用onRejected |
上述兩個方法均返回一個Promise,這意味着.then
和.catch
能夠鏈式書寫。例如:異步編程
padmin .then(function(admins){ doSthWith(admins); }) .catch(function(err){ console.error(err); });
在任何一個then()
回調中拋出的錯誤都會被後面的catch()
所截獲,以此能夠作統一的錯誤處理:函數
瞭解更多請查看原文:http://it.lindukj.cn/archives/2155,我就不一一贅述了!