在将响应发送回客户端之前,您如何等待Mandrill的交付响应?

时间:2014-08-07 21:03:08

标签: javascript node.js mandrill koa

我正在使用Koa和Node 0.11构建一个简单的服务器。我希望当用户从我的网站提交查询时,会向我发送一封电子邮件。当然,如果电子邮件由于某种原因无法发送,我想提醒用户,但我不确定等待"等等的最佳方式。要做到这一点。

我的相关服务器代码非常简单:

app.put('/inquiry', function *() {
    var status = yield sendEmail('test', "my message", "me@mysite" );
    this.body = status;
});

function sendEmail(subject, message, to) {
    var fromEmail = 'you@yoursite.com';
    var tags = ['subject'];
    var to = {email: to};

    return function() {

        mandrill('/messages/send',
            {
                message: {
                    "from_email":fromEmail,
                    "to":[to],
                    "text":message,
                    "tags":tags
                }
            },
            function (error, response) {
                if (error) {
                    console.log(JSON.stringify(error));
                    return error;
                }
                else {
                    console.log("Mandrill result: "+response);
                    return response;
                }
            };
        );   
    };
};

我遇到的问题是Mandrill.send()函数没有返回任何内容,而且我不确定最好的做法是什么。

1 个答案:

答案 0 :(得分:1)

你只需要将它包装在一个像这样的匿名函数中:

function sendEmail(subject, message) {
    var fromEmail = 'test@elliottregan.com';
    var tags = ['subject'];
    var to = {email:'oatmealsnap@gmail.com'};

    return function(callback) {
        mandrill('/messages/send', {
            message: {
                "from_email":fromEmail,
                "to":[to],
                "text":message,
                "tags":tags
            }
        },
        function (error, response) {
            if (error) {
                console.log(JSON.stringify(error));
                return error;
            }
            else {
                console.log("Mandrill result: "+response);
                callback(null, response);
            }
        }
    )}
};