一次发送两封邮件 /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"));
我的问题很简单 - 有时其中一封邮件未发送。我的代码:
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"));