我有一个简单的案例,每天一天,我必须遍历mongo数据库中的每个条目,并向 registrationDate 结束的每个用户发送电子邮件。 30天。
我的代码:
import schedule from 'node-schedule';
schedule.scheduleJob(
'0 0 * * *', // will occur every day at midnight
async () => {
await Promise.all(notifyUsers());
},
);
notifyUsers
功能:
const THIRTY_DAYS = 1000 * 60 * 60 * 24 * 30;
const allUsersMore30days = Users.find(
{
hasBeenReminded: false,
registrationDate: {
"$lt": new Date(Date.now() - THIRTY_DAYS),
},
},
);
然后:
const notifyUsers = () => allUsersMore30days && allUsersMore30days.map(async(user) => {
await Users.updateOne({ id: user.id }, { "$set": { hasBeenReminded: true }});
await transporter.sendMail(SENDING_MAIL_LOGIC);
});
该函数已在午夜正确调用,但是如果有30天以上的用户,则不会发送邮件,也不会采取任何措施。有许多用户超过30天,但仍然没有采取任何措施。
问题:我应该在这里使用Promise
吗?应该是scheduleJob
异步函数吗?我一直在努力寻找帮助。