首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蓝鸟-编程- promisifyAll的‘电子邮件-模板’节点模块-发送邮件

蓝鸟-编程- promisifyAll的‘电子邮件-模板’节点模块-发送邮件
EN

Stack Overflow用户
提问于 2015-05-04 03:36:21
回答 2查看 329关注 0票数 1

我正试图将email-templates节点模块转换成承诺。我正在使用蓝知更鸟进行编程,但它无法转换。

代码语言:javascript
复制
var emailTemplates = Promise.promisifyAll(require('email-templates'));

程序化节点模块是否支持此转换,还是我做错了什么?

编辑:

我现在就是这样做的,但是我想把这个变成蓝鸟的承诺。

代码语言:javascript
复制
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);
                                }
                            });
                        }
                    });
                }
            });
        }
}
EN

回答 2

Stack Overflow用户

发布于 2015-05-04 06:50:23

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

代码语言:javascript
复制
var emailTemplates = Promise.promisify(require('email-templates'));

问题是它的行为不太好,因为函数本身有一个回调参数,所以您必须这样做:

代码语言:javascript
复制
emailTemplates().then(function(template){
    Promise.fromNode(template.bind(null, "template-name")).then(...
});
票数 1
EN

Stack Overflow用户

发布于 2016-12-01 08:10:44

Promisify也为我做了错误的行为,所以我做了一个手工编程。

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30022234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档