Модули, выполняющие задачи setTimeout()
У меня есть потребность выполнения определенных действий через Nное время. Если это время небольшое, например, 1 час, тогда при использовании
setTimeout(async () => {}, 1000 * 60 * 60)
Все прекрасно работает, но мне может потребоваться установить таймеры и на 10, и на 20 дней. Даже на 1 день уже не работает. Есть какие-то альтернативы setTimeout() из npm модулей?
const cron = require('node-cron');
// Запуск задачи каждый день в 00:00
cron.schedule('0 0 * * *', async () => {
// Ваша задача
});
agenda — это библиотека для планирования задач, которая поддерживает сохранение задач в базе данных (например, MongoDB), что делает её более надежной.
const Agenda = require('agenda');
const agenda = new Agenda({ db: { address: 'mongodb://localhost:27017/agenda' } });
agenda.define('my task', async (job) => {
// Ваша задача
});
(async function() {
await agenda.start();
// Планирование задачи на 10 дней вперед
await agenda.schedule('in 10 days', 'my task');
})();
bull — это библиотека для создания очередей задач, поддерживающая отложенные задачи и работающая с Redis.
const Queue = require('bull');
const myQueue = new Queue('my-queue', 'redis://127.0.0.1:6379');
myQueue.process(async (job) => {
// Ваша задача
});
// Планирование задачи на 10 дней вперед
myQueue.add({}, { delay: 10 * 24 * 60 * 60 * 1000 });
node-schedule:
node-schedule позволяет вам планировать задачи с использованием более гибких временных интервалов и расписаний.
const schedule = require('node-schedule');
// Планирование задачи на конкретное время в будущем
const date = new Date();
date.setDate(date.getDate() + 10); // 10 дней вперед
schedule.scheduleJob(date, async () => {
// Ваша задача
});
Каждая из этих библиотек имеет свои особенности и подходит для различных случаев использования. Выбор зависит от ваших конкретных требований, например, необходимость сохранения состояния задач, работа с базами данных или очередями.