У меня есть задание cron, которое будет создаваться после каждого запроса на бронирование билета, и это задание будет запускаться через 15 минут и проверять, произведена ли оплата. Если нет, то он сделает этот билет доступным для других пользователей.
new CronJob('*/15 * * * *', function () {
const that = this;
co(function* () {
try {
const order = yield mongoose.model('Orders').findById(orderId);
if (order.orderStatus === 'pending') {
order.orderStatus = 'released';
yield order.save();
yield mongoose.model('Outing').findByIdAndUpdate(outing, {
'$set': {
'showFlag': true
}
});
console.info(`Order:${orderId} has been cancelled due to session time out - ${new Date()}`);
} else if (order.orderStatus === 'released') {
console.info(`Order:${orderId} is cancelled due to Client's request`);
} else if (order.orderStatus === 'reserved') {
console.info(`Order:${orderId} is reserved`);
}
console.info('Job ended:', new Date());
that.stop();
} catch (error) {
console.info(error);
}
});
}, null, true);
};
Итак, что здесь происходит: для каждого запроса создается новое задание, через 15 минут задание выполняется, а затем соответствующее задание cron останавливается! Так это как-то повлияет на производительность? Если да, то есть ли у меня другой способ запустить этот процесс в фоновом режиме?
Освободит ли сборщик мусора cron после вызова метода stop?
Я ничего не могу сказать о stop, потому что вы не объяснили, что такое CronJob.
Ok. CronJob - это объект, который мы можем создать с помощью модуля узла под названием cron. После получения этого объекта мы можем запускать задачи в фоновом режиме сервера через определенный промежуток времени.
Тогда это зависит от cron. Если вас беспокоят возможные проблемы со сторонним пакетом, рассмотрите возможность проверки открытых проблем в его репозитории. Что касается содержимого должностных функций, это относится не только к Cron, но и к тому, как работает JS. Если нужно собрать мусор, он будет собран. Из того, что я вижу, я не ожидал, что эта функция вызовет утечку памяти. Я не могу гарантировать, что не будет утечек памяти, это то, что нужно проверить самому.





Что такое CronJob? Cron не имеет ничего общего с Node. Вы используете какой-то помощник Cron или его замену. Неизвестно, что это такое и как влияет на ваше приложение.