蓝鸟 – promisification – promisify所有'email-templates'节点模块 – 发送邮件

我正试图将email-templates节点模块转换为承诺。 我正在使用蓝鸟 promisification,但它不能转换。

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

Promiseification节点模块是否支持这种转换或者我是否有任何错误?

编辑:

我现在正在做这个,但是要把它转换成蓝鸟的承诺。

 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); } }); } }); } }); } } 

emailTemplates是一个函数,所以你可以这样做:

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

问题是,由于函数本身有一个callback参数,所以performance不好,所以你必须这样做:

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

Promiseify missbehaved我也是,所以我做了一个手动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": "donotreply@example.com", "To": "target@example.us", "Subject": "Test", "TextBody": "Test Message" }, function(error, result) { if(error) { reject(error); } else { resolve(result); } }) }); return promise; }