Node.js 尝试使用AWS Lambda和Mailgun发送事务性电子邮件时的奇怪行为
背景:我一直在使用Lambda函数通过邮枪服务发送事务性电子邮件。我选择使用node.js实现服务器,因为我以前使用过这种语言,但我在服务器端工作的经验不多,所以我一直在努力了解发生了什么 任务:ideia将向多个为此特定邮件注册的收件人发送一封个性化电子邮件,这些收件人只向Lambda功能发出一个请求 问题:为了执行上面解释的任务,我根据Mailgun文档和API参考提出了这个基本实现。我使用了一个Node.js 尝试使用AWS Lambda和Mailgun发送事务性电子邮件时的奇怪行为,node.js,aws-lambda,mailgun,Node.js,Aws Lambda,Mailgun,背景:我一直在使用Lambda函数通过邮枪服务发送事务性电子邮件。我选择使用node.js实现服务器,因为我以前使用过这种语言,但我在服务器端工作的经验不多,所以我一直在努力了解发生了什么 任务:ideia将向多个为此特定邮件注册的收件人发送一封个性化电子邮件,这些收件人只向Lambda功能发出一个请求 问题:为了执行上面解释的任务,我根据Mailgun文档和API参考提出了这个基本实现。我使用了一个forEach,这样我就可以向每个收件人发送一封定制的电子邮件,这正是我所期望的 在本地测试时
forEach
,这样我就可以向每个收件人发送一封定制的电子邮件,这正是我所期望的
在本地测试时,一切正常。执行请求并按预期发送电子邮件
然而,在将代码部署到AWS之后,一种奇怪的行为开始出现。当执行请求时,代码的执行似乎在完成之前就停止了,这导致只发送了几封电子邮件。另一件经常发生的事情是,lambda函数的第一次调用不会触发sendBulkTemplatedEmail
,而是在第一次尝试之后,事情开始进行
CloudWatch上的日志就是这样的:
每一条蓝线都是我使用邮递员执行的请求。出于测试目的,我总是使用3个收件人发送电子邮件。红线表示我添加到代码中的
console.log(body)
。当像{id:'这样的消息没有查看处理程序代码时,我怀疑有两种可能的情况:
context.callbackhaitsforemptyeventloop=false
,这会在调用callback
函数时导致lambda结束sendBulkTemplateEmail
函数更改为:
const sendBulkTemplateEmail=(配置)=>(组)=>{
返回组.participants.map((participant)=>{
//处理您一直在做的代码;
返回mailgun.messages().send(data)})
}
}
当我第一次开始使用JS/lambdas时,我就看到过这样的行为,而且对这两者都是全新的,因此没有正确地实现异步内容。首先,很难说太多,因为上面的代码可能不是完整的lambda,所以我看不出上面的代码是如何使用的。我的怀疑是你没有正确地等待电子邮件的发送,这使得lambda可以在仍然有未解决的承诺时返回并说它已经完成。然后(在req 2中),最终承诺最终解决并被记录,因此,当它不是req 3的一部分时,它似乎是req 3的一部分。