Promise異步編程模式總結

Promise是JavaScript中的一種異步編程範式, 一個Promise對象表示一個即將完成但還未完成的操做。 鑑於JavaScript中異步和回調的編程風格, Promise模式能夠有效地避免『Callback Hell』。npm

Promise 最初有qbluebird等實現,在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時,該Promiseresolveiterable中任何一個被reject,則該Promise被reject
Promise.race(iterable) iterable中任意一個Promise被resolvereject,該Promise都會相應地結束
Promise.reject(err) 直接返回一個被reject的Promise對象
Promise.reject(value) 直接返回一個被resolve的Promise對象

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,我就不一一贅述了!
相關文章
相關標籤/搜索