我正在使用發送電子郵件nodemailer,如果發送失敗,我想在重試中使用不同的主機。
我試過了:
let tries = 0;
let maxTries = 2;
const sendEmail = async () => {
tries = 1;
if (tries === maxTries) return;
const transporter = nodemailer.createTransport({
host: tries === 1 ? host1 : host2,
port: port,
secure: false
});
// mailOptions object here....
await transporter.sendMail(mailOptions, (err, info) => {
if (err) {
return sendEmail();
} else {
console.log('Email Sent Successfuly');
}
});
}
它有效,但感覺有點麻煩。
有沒有更好的方法來實作這個功能?
uj5u.com熱心網友回復:
像這樣的東西怎么樣(根據Bergi的建議更新)?
const sendEmail = async (mailOptions, hosts = [host1, host2]) => {
if (hosts .length == 0) {
return Promise .reject ('all hosts failed')
}
// configure transporter
try {
const info = await transporter .sendMail (mailOptions);
return 'Email sent successfully';
} catch (err) {
return sendEmail (option, hosts .slice (1))
}
}
(請不要使用這個原始版本,因為Bergi指出的原因)
顯示代碼片段
// DO NOT USE
const sendEmail = async (options, hosts = [host1, host2]) => {
if (hosts .length == 0) {
return Promise .reject ('all hosts failed')
}
// configure transporter
return new Promise ((resolve, reject) => {
transporter .sendMail (mailOptions, (err, info) => {
if (err) {
return sendEmail (option, hosts .slice (1))
} else {
resolve ('Email Sent Successfuly');
}
})
})
}
它可以很容易地擴展到處理類似的事情:
const hosts = [{host: host1, tries: 3}, {host: host2, tries: 1}, {host: host3, tries: 5}]
sendMail (options, hosts)
這樣它就會嘗試第一個主機三次,然后第二個主機一次,然后第三個主機五次,然后放棄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/448938.html
標籤:javascript 递归 节点邮件程序
上一篇:Lua中的遞回合并排序顯示錯誤行為;雖然幾乎相同的python代碼運行良好
下一篇:如何避免遞回或解決問題?
