我正试图将email-templates节点模块转换成承诺。我正在使用蓝知更鸟进行编程,但它无法转换。
var emailTemplates = Promise.promisifyAll(require('email-templates'));程序化节点模块是否支持此转换,还是我做错了什么?
编辑:
我现在就是这样做的,但是我想把这个变成蓝鸟的承诺。
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);
}
});
}
});
}
});
}
}发布于 2015-05-04 06:50:23
emailTemplates是一个函数,所以您可以这样做:
var emailTemplates = Promise.promisify(require('email-templates'));问题是它的行为不太好,因为函数本身有一个回调参数,所以您必须这样做:
emailTemplates().then(function(template){
Promise.fromNode(template.bind(null, "template-name")).then(...
});发布于 2016-12-01 08:10:44
Promisify也为我做了错误的行为,所以我做了一个手工编程。
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;
}https://stackoverflow.com/questions/30022234
复制相似问题