Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我需要向阵列中的所有用户发送电子邮件_Javascript_Node.js_Typescript - Fatal编程技术网

Javascript 我需要向阵列中的所有用户发送电子邮件

Javascript 我需要向阵列中的所有用户发送电子邮件,javascript,node.js,typescript,Javascript,Node.js,Typescript,我正在开发一个向用户发送电子邮件的功能,我已经有了发送邮件的功能,它可以发送给单个用户。我正在尝试发送到阵列中的多个用户 我是用打字脚本写的,我使用mailgun作为我的电子邮件服务提供商 这是一个示例发送邮件功能: const数据={ 发件人:'example@from.com', 致:'example@reciever.com', 主题:'样本主题', html:wait email(),//我正在这里获取电子邮件模板 } 等待mailgun.messages().send(数据) 使用上

我正在开发一个向用户发送电子邮件的功能,我已经有了发送邮件的功能,它可以发送给单个用户。我正在尝试发送到阵列中的多个用户

我是用打字脚本写的,我使用mailgun作为我的电子邮件服务提供商

这是一个示例发送邮件功能:

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)来增强代码