【发布时间】:2020-10-18 11:34:04
【问题描述】:
我正在尝试使用nodemailer 根据数据库中的条目发送电子邮件。我几乎尝试了我能想到的任何事情(手动创建Promises 的数组并在Promise.all() 的调用中使用它,使用map 等),但我总是遇到同样的错误: UnhandledPromiseRejectionWarning: Error: Message failed: 450 SQLITE_ERROR: cannot start a transaction within a transaction。 nodemailer-documentation 明确指出 -- 当不传递回调-fn 时,transporter.sendMail()-function 被包装为一个承诺。但是,当我像这样手动定义这些承诺的数组时......
const transporter = nodemailer.createTransport(serverData);
const mailData = ...;
const arr = [transporter.sendMail(mailData), transporter.sendMail(mailData)];
...即使我没有使用Promise.all() '跑'过那个数组,同样的错误已经触发;数组中的函数只有在我手动指定时才会运行,这是一种误解吗?
无论如何,这是我完整的数据库代码;我正在使用sequelize 从数据库中检索数据。我已验证此任务的从数据库检索数据端没有问题。
class Mail extends Model {
...
static resendUndeliveredMails(){
this.findAll()
.then((mails) => {
return Promise.all(mails.map(async mail => {
transporter.sendMail(mail.dataValues);
}));
})
.catch((e) => {
console.log(e);
});
}
}
任何帮助将不胜感激!提前谢谢你:)。
【问题讨论】:
标签: javascript node.js sequelize.js nodemailer