我有Twilio Studio调用Twilio函数,需要它将电子邮件发送到电子邮件的可变列表(小列表)。这个问题主要是围绕它们的循环,因为我可以很好地传递变量。我有许多电子邮件发送文本到Twilio函数,并且在其中。但是我在网上找到的所有示例都只发送给一个。我的一部分认为这应该是一个Twilio函数,该函数调用另一个Twilio函数(一个循环,另一个发送电子邮件)...但是我不知道这样做的方法。如果我可以将其包含在一个Twilio函数中,那就太好了。
我有Twilio Studio调用了Twilio函数。我需要将所有内容保留在Twilio上...因此,无法通过PHP循环并一次运行一个函数。我需要它在Twilio的无服务器安装程序上运行。
这是我的作品的一个示例:
exports.handler = function(context, event, callback) {
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(context.SENDGRID_API_KEY);
var responder_emails = 'me@example.com,me+test1@example.com';
var emails_a = responder_emails.split(',');
emails_a.forEach(function(responder_email) {
const msg = {
to: responder_email,
from: 'noreply@example.com',
templateId: 'my-id-goes-here',
dynamic_template_data: {
recipient_name: 'John Smith'
}
};
sgMail.send(msg);
});
callback();
};
这是我试图以类似的方式循环通过并失败
<div style="margin:-2em;">
<p>Blah blah blah</p>
</div>
我可以将多封电子邮件传递给Twilio函数...我只是不确定如何正确遍历。
答案 0 :(得分:2)
Heyo。 Twilio传播者在这里。
在第一个示例中,您正确地等待使用send
完成then
调用。在第二个示例中,您错过了这一点。您运行了多个send
呼叫,但立即等待不停地呼叫callback
。
固定的(大致为原型版本)可能如下所示。
exports.handler = function(context, event, callback) {
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(context.SENDGRID_API_KEY);
var responder_emails = 'me@example.com,me+test1@example.com';
var emails_a = responder_emails.split(',');
Promise.all(emails_a.map(function(responder_email) {
const msg = {
to: responder_email,
from: 'noreply@example.com',
templateId: 'my-id-goes-here',
dynamic_template_data: {
recipient_name: 'John Smith'
}
};
return sgMail.send(msg);
})).then(function() {
callback();
}).catch(function(e) {
callback(e);
})
});
由于您致电split
,因此已经有一系列电子邮件。您可以将此数组与Array.map
和Promise.all
结合使用。
Map基本上会遍历您的数组,并允许您使用从map内部的函数返回的内容创建一个新的数组。上面的代码所做的是将[email, email]
转换为[Promise, Promise]
。承诺是sgMail.send
的返回值。
现在,您拥有一个保存诺言的数组,当sendgrid接受您的呼叫时,该诺言将解决,您可以使用Promise.all
。此方法等待所有诺言得到解决(或拒绝),并向自身返回一个新的诺言,您可以将其与then
一起使用。完成所有sendgrid调用后,就可以通过调用函数callback
来完成该功能。
旁注:此“ map / Promise.all”技巧可以并行执行所有发送网格调用。在某些情况下,您想称他们为one after another(例如您进行了很多通话并遇到了速率限制)。
希望有帮助,让我知道进展如何。 :)