Bluebird - promisification - promisifyAll of 'email-templates' Node Module - Отправить почту

Я пытаюсь преобразовать модуль узла email-templates в обещание. Я использую bluebird для промисификации, но он не может быть конвертирован.

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

Модуль узла обещания поддерживает это преобразование или я делаю какую-то ошибку?

ОТРЕДАКТИРОВАНО:

Я делаю это сейчас, но хочу преобразовать это в обещание bluebird.

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

person Yogeshree Koyani    schedule 04.05.2015    source источник
comment
А почему вы говорите, что он не работает? Что вы пробовали?   -  person jfriend00    schedule 04.05.2015


Ответы (2)


emailTemplates - это функция, поэтому вы должны сделать:

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

Проблема в том, что она плохо себя ведет, поскольку сама функция имеет аргумент обратного вызова, поэтому вам придется сделать:

emailTemplates().then(function(template){
    Promise.fromNode(template.bind(null, "template-name")).then(...
});
person Benjamin Gruenbaum    schedule 04.05.2015
comment
Я сделал с обратным вызовом в стиле узла, но, как я уже упоминал в своем Que, я хочу преобразовать это в обещание bluebird. Можете ли вы помочь мне больше в этом. Я понимаю, как вы объясняете, но я не мог совместить все это. - person Yogeshree Koyani; 04.05.2015

Обещание у меня тоже плохо себя вело, поэтому я сделал обещание вручную.

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;
}
person Smolkis    schedule 01.12.2016