2015-05-04 34 views
1

我試圖將email-templates節點模塊轉換爲promise。我使用bluebird進行了promisification,但無法轉換。Bluebird - promisification - promisify所有'email-templates'節點模塊 - 發送郵件

var emailTemplates = Promise.promisifyAll(require('email-templates')); 

是promisification節點模塊支持這種轉換還是我在做什麼錯誤?

編輯:

我現在所做的這樣,但想將其轉換爲藍鳥承諾。

var emailTemplates = require('email-templates'); 
var path = require('path'); 
var templatesDir = path.resolve(__dirname, '../..', 'assets/templates'); 
var postmark = require('postmark'); 

var postmarkKey = MY_POSTMARK_KEY; 
var postmarkClient = postmark(postmarkKey); 

module.exports = { 
    sendEmail : function (templateName, locals, callback) {  
      emailTemplates(templatesDir, function (err, template) { 
       if (err) 
        return callback(err, null); 
       else { 
        template(templateName, locals, function (err, html, text) { 
         if (err) {       
          return callback(err, null); 
         }  
         else { 
          postmarkClient.send({ 
           From: locals.from, 
           To: locals.to, 
           Subject: locals.subject, 
           HtmlBody: html 
           TextBody: text 
          }, function (err, responseStatus) { 
           if (err) {         
            return callback(err, null); 
           } 
           else { 
            return callback(err, responseStatus); 
           } 
          }); 
         } 
        }); 
       } 
      }); 
     } 
} 
+0

你爲什麼說它不工作?你嘗試了什麼? – jfriend00

回答

1

emailTemplates是一個函數,所以你會怎麼做:

var emailTemplates = Promise.promisify(require('email-templates')); 

的問題是,它並沒有很好的表現,因爲函數本身有回調參數,所以你需要做的:

emailTemplates().then(function(template){ 
    Promise.fromNode(template.bind(null, "template-name")).then(... 
}); 
+0

我做過節點式回調,但正如我在我的Que中提到的,我想將其轉換爲藍鳥許諾。你能幫助我嗎?我理解你解釋的方式,但我無法將這一切結合起來。 –

0

Promisify missbehaved for me,所以我做了一個手動promisification。

var postmark = require("postmark"); 
var client  = new postmark.Client("POSTMARK_API_TEST"); 
var Promise  = require('bluebird'); 

exports.sendInviteEmail = function(email) { 
    let promise = new Promise((resolve, reject) => { 
     client.sendEmail({ 
      "From": "[email protected]", 
      "To": "[email protected]", 
      "Subject": "Test", 
      "TextBody": "Test Message" 
     }, function(error, result) { 
      if(error) { 
       reject(error); 
      } else { 
       resolve(result); 
      } 
     }) 
    }); 
    return promise; 
}