一次发送两封邮件 /post?

Send two mails in one /post?

我的问题很简单 - 有时其中一封邮件未发送。我的代码:

api.post('/sendMail', (req, res) => {
   transporter.sendMail(someFunc(), (err) => { // send mail to one user
      if (err) {  
         res.status(500).send('error');
      }

      res.status(200).send('success');
   });

   transporter.sendMail(someFunc(), (err) => {  // send mail to second user
      if (err) {  
         res.status(500).send('error');
      }

      res.status(200).send('success');
   });
});

如上 - 有时其中一封邮件未发送。

问题:负责发送第二封邮件的代码是否应该在第一封邮件的回调中?或者像上面的代码一样将它们分开是完全没问题的?谢谢!

代码在很多情况下可能会失败。你不能告诉 Express 用两个不同的状态代码来回答,你必须决定 一次 你发送哪个代码和响应。

Should code responsible for sending second mail be inside callback of first mail ?

是的,这可能是一种方式,但是有两个缺点

1) 扩展性不佳(针对四、三……一万封电子邮件……)

2) 它不能很好地扩展性能,因为它会一封接一封地发送电子邮件,您可以改为并行发送它们:

为此,请承诺发送邮件:

const sendMail = () => new Promise((resolve, reject) => {
  transporter.sendMail(someFunc(), (err) => { 
    if(err) reject(err) else resolve();
  });
});

那么就很简单了:

Promise.all([ sendMail(), sendMail() ])
 .then(() => res.status(200).send("success"));
 .catch(() => res.status(500).send("failure"));