javascript - 异步函数进行的重复调用
问题描述
以下内容旨在对数据库进行各种调用,以拉取必须通过电子邮件发送的用户,并向每个用户发送个性化消息。emailService.sendEmail 调用正常工作的 smtp nodemailer 服务。但是,该函数会并行执行多次,从而导致向每个收件人发送 3 次电子邮件。例如,'const response = await SQL.getProjectsWithCurrentUTCDate();' 正在返回两个不同的响应,每个响应都遍历整个函数。
var job = schedule.scheduleJob('*/15 * * * *', async function () {
try {
// first, get projects that have a reminder date or start date of current day
const response = await SQL.getProjectsWithCurrentUTCDate();
// next, for each project
response.rows.forEach(async function (project) {
// Create a projectData object
var projectData = new Object();
projectData.projectName = project.name;
projectData.startDate = project.start_date.toISOString().substring(0, 10);
try { projectData.reminder1Date = project.first_reminder_date.toISOString().substring(0, 10); } catch (ignore) { }
try { projectData.reminder2Date = project.second_reminder_date.toISOString().substring(0, 10); } catch (ignore) { }
projectData.endDate = project.end_date.toISOString().substring(0, 10);
projectData.fields = project.fields;
// get revalidator emails who have incomplete revalidations for the given project
const secondResponse = await SQL.getRevalidatorsForIncompleteRevalidationsForProjectId(project.id);
// finally, send email to those revalidators
const emailMessage = EmailService.emailMessageFromProjectData(projectData);
secondResponse.rows.forEach(function (element) {
//var sent = false;
//console.log("sent= " + sent);
const data = {
from: project.email,
to: [element['revalidator_email']],
subject: project.subject,
message: emailMessage.replace(/@@EMAIL@@/g, element['revalidator_email'])
};
EmailService.sendEmail(data);
});
});
} catch (err) {
console.log('Email scheduler failed with error: ' + err);
}
});
解决方案
推荐阅读
- react-native - 导航器外的导航不起作用
- python - Python 不匹配正则表达式检查
- python - 尝试使预训练的 BERT 适应句子语义分离的另一个用例
- python - conda install packages 错误:收集包元数据(current_repodata.json):失败
- sql - 新手:将数据批量添加到 sqlite 数据库的最简单方法是什么?
- rust - 即使 src/main.rs 可用, cargo 也不会构建
- arrays - 使用父 ID 将平面 JSON 字符串转换为层次结构
- python - 使用 OpenCV Python 运行硬件优化的 NVIDIA 光流
- mongodb - 当localField为字符串且foreignField为ObjectId格式时的Mongodb $lookup
- java - 单击按钮时如何延迟程序(java swing)