Javascript 返回值始终未定义-在Express应用程序中运行的AWS.SES示例

Javascript 返回值始终未定义-在Express应用程序中运行的AWS.SES示例,javascript,promise,Javascript,Promise,我正在使用AWS示例中的一些代码,在Express应用程序中通过SES发送电子邮件。电子邮件工作得很好,但我希望能够根据发送电子邮件的成功与否更改对浏览器的响应 但是发送电子邮件的函数总是返回未定义的,我认为这是因为调用函数没有正确地等待结果 在express应用程序中: app.post('/api/sendEmail', sendEmail); async function sendEmail(request, response){ //console.dir(request.bo

我正在使用AWS示例中的一些代码,在Express应用程序中通过SES发送电子邮件。电子邮件工作得很好,但我希望能够根据发送电子邮件的成功与否更改对浏览器的响应

但是发送电子邮件的函数总是返回未定义的,我认为这是因为调用函数没有正确地等待结果

在express应用程序中:

app.post('/api/sendEmail', sendEmail);

async function sendEmail(request, response){
    //console.dir(request.body);
    await emailer(request.body)
    .then(result => console.log(result));
    //should base response on result
    response.json(('{"status": "success"}'));
}
然后,我有另一个包含emailer函数的文件,加载为
emailer

module.exports = async function sendEmailFunction(data) {
         console.log('send email function');
         let email = new AWS.SES({apiVersion: '2010-12-01'}).sendEmail(createEmailParams(buildEmail(data))).promise();
         email.then(
             function(res) {
               console.log(res.MessageId); // works
               return res.MessageId;       // undefined
             }).catch(
               function(err) {
               console.error('problems', err, err.stack);
               return `Error! ${err}, ${err.stack}`;
             });
}
在控制台中,我总是可以看到:

send email function
undefined
0101017865c6f27b-955661fb-af47-4490-8eb6-7b59a0ec3414-000000 
guid是res.MessageId的控制台日志(电子邮件成功)。Undefined是记录结果的第一个函数中的控制台日志。我可以在messageid前面看到undefined show,所以我认为sendEmail函数并不是在等待emailer完成


相当确定sendEmail函数
createEmailParams(buildEmail(数据)中的函数< /代码>不是问题,如果我删除它们,那么我仍然得到未定义的返回而不是错误消息。

在面值上,它看起来不像是在返回SeNeMeAcess函数的等待流,也不是在函数本身中等待。考虑等待响应并在StEdMeAcple函数或R中返回它。重新开启电子邮件承诺,让上游功能等待它,并梳理出它所寻找的价值

例如:

module.exports = async function sendEmailFunction(data) {
     console.log('send email function');
     let email = new AWS.SES({apiVersion: '2010-12-01'}).sendEmail(createEmailParams(buildEmail(data))).promise();
     let response = await email.then(
         function(res) {
           console.log(res.MessageId); // works
           return res.MessageId;       // undefined
         }).catch(
           function(err) {
           console.error('problems', err, err.stack);
           return `Error! ${err}, ${err.stack}`;
         });
     return response; }

sendmailfunction
从不返回任何内容,因此您会得到Javascript函数的标准返回值,即
未定义的
。这对我来说一点都不明显,从我的角度看,它都在同一个函数中。现在我想我可以看到
函数(res)是如何
是它自己的东西,它返回到父函数,而不是调用父函数的另一个函数。我想如果我写了这样的嵌套函数,它们不是承诺,我就会知道内部函数只是返回到父函数,而不是调用父函数的函数。啊哈。明白了。最初我只是看到你在底部添加了一个返回,并添加了一个测试值,但是我没有注意到,在中间,你做了代码>让ReSpSeSe= Acth..…/代码>。现在我看到你的工作方式了。非常感谢,花了几个小时尝试不同的事情。