Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.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_Nodemailer - Fatal编程技术网

Javascript 一次发两封信?

Javascript 一次发两封信?,javascript,node.js,nodemailer,Javascript,Node.js,Nodemailer,我的问题很简单——有时其中一封邮件没有发送。我的代码: 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');

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

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使用两种不同的状态代码进行应答,您必须决定发送哪种代码和应答

负责发送第二封邮件的代码应该在第一封邮件的回调内吗

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

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"));