我的问题很简单-有时其中一封邮件没有发送。我的代码:
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');
});
});
如上所述-有时其中一封邮件未发送。
问题:负责发送第二封邮件的代码是否应位于第一封邮件的回调中?还是像上面的代码中那样将它们分开是完全可以的吗?谢谢!
答案 0 :(得分:3)
在许多情况下,代码可能会失败。您无法告诉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"));