Javascript 我需要向阵列中的所有用户发送电子邮件
我正在开发一个向用户发送电子邮件的功能,我已经有了发送邮件的功能,它可以发送给单个用户。我正在尝试发送到阵列中的多个用户 我是用打字脚本写的,我使用mailgun作为我的电子邮件服务提供商 这是一个示例发送邮件功能:Javascript 我需要向阵列中的所有用户发送电子邮件,javascript,node.js,typescript,Javascript,Node.js,Typescript,我正在开发一个向用户发送电子邮件的功能,我已经有了发送邮件的功能,它可以发送给单个用户。我正在尝试发送到阵列中的多个用户 我是用打字脚本写的,我使用mailgun作为我的电子邮件服务提供商 这是一个示例发送邮件功能: const数据={ 发件人:'example@from.com', 致:'example@reciever.com', 主题:'样本主题', html:wait email(),//我正在这里获取电子邮件模板 } 等待mailgun.messages().send(数据) 使用上
const数据={
发件人:'example@from.com',
致:'example@reciever.com',
主题:'样本主题',
html:wait email(),//我正在这里获取电子邮件模板
}
等待mailgun.messages().send(数据)
使用上面的代码,我将向单个用户发送电子邮件。下面的json显示了我是如何接收电子邮件列表的:
[
{
"name": "User 1",
"email": "user1@gmail.com"
},
{
"name": "user 2",
"email": "user2@gmail.com"
}
]
我希望能够发送到多个用户,我希望这样做的智能方式。如果可能,请用代码建议最佳解决方案
谢谢。使用数组映射
我不懂打字稿
你可以得到像这样的所有元素
对于ES6
user_list.map(user => console.log(user.name, user.email))
我假设你正在使用,它似乎有一个叫做的东西,你可以利用它。如果没有,那么我建议不要简单地迭代用户列表并一次发送一封电子邮件(与wait同步),而是触发异步发送所有电子邮件,然后使用Promise.all来知道何时发送了所有电子邮件。下面的示例并没有经过测试(因为我从未使用过mailgun),但它应该会让您了解如何实现它
const users = [
{
"name": "User 1",
"email": "user1@gmail.com"
},
{
"name": "user 2",
"email": "user2@gmail.com"
}
];
const sendEmailToUser = async (user) => {
const data = {
from: 'example@from.com',
to: 'example@reciever.com',
subject: 'Sample subject',
html: 'await email()'
};
await mailgun.messages().send(data);
};
(async () => {
const sendEmailPromises = [];
for(const user of users) {
// Start sending all emails
sendEmailPromises.push(sendEmailToUser(user));
}
// Wait for all emails to be sent
await Promise.all(sendEmailPromises);
// Do something
})()
无论如何,您都必须迭代数据结构
var users = [
{
"name": "User 1",
"email": "user1@gmail.com"
},
{
"name": "user 2",
"email": "user2@gmail.com"
}
];
users.forEach(function(user){
name = user.name;
email = user.email;
var data = {
from: 'example@from.com',
to: email,
subject: 'Sample subject',
html: await email(),
}
await mailgun.messages().send(data);
});
假设
send
函数为async
并返回承诺:
async function sendMail(){
const myRecipients = [
{
"name": "User 1",
"email": "user1@gmail.com"
},
{
"name": "user 2",
"email": "user2@gmail.com"
}
]
const fromAddress = "my@email.address"
// map our recipient array to the message format expected by `send`
const myMessages = myRecipients.map(r => ({
from: fromAddress,
to: r.email,
subject: "somesubject",
html: "some html"
}))
// map our messages to a bunch of "in-flight" promises
const promises = myMessages.map(m => mailgun.messages().send(m))
// wait for all the promises to complete
await Promise.all(promises)
}
你的建议是什么?也许可以遍历数组?但是我想要一个更智能的解决方案。这是
map
的滥用,因为它将创建一个未使用的数组作为其输出。这就是为什么存在forEach
的原因。最好按照用户6601176的要求使用mailgun.messages().send(data)来增强代码