Как создать переменную времени, которая всегда обновляется - PullRequest
0 голосов
/ 20 апреля 2020

Я уверен, что об этом уже спрашивали, но я не могу найти ничего полезного, надеюсь, название имеет смысл, я новичок в javascript и ноде. Короче говоря, я создаю бота для внутренней системы обмена сообщениями (например, Slack). Мой бот является ботом-напоминанием, поэтому пользователь может ввести ключевое слово и сказать «напомнить мне о« х »через 10 минут» или «напомнить мне сделать« у »30 апреля в 9:00» et c.

В моей голове имело смысл иметь глобальную переменную времени, которая постоянно обновляется, например:

if(currentDateTime >= reminderArray[0].notificationTime){
    bot.sendMessage(reminderArray[0].message);
    reminderArray.shift();
}

pu sh все напоминания в глобальной очереди, где они сортируются по время напоминания, а затем запустить бота, чтобы отправить сообщение, когда глобальное время равно времени первого элемента в очереди.

Мне очень трудно понять, как получить обновленную глобальную переменную времени в режиме реального времени , Я посмотрел на задания cron, но не уверен, как запустить одновременно несколько заданий cron.

Я понятия не имею, слишком много я думаю об этом или нет, это было похоже на 3 дни, когда я стучал головой по клавиатуре, чтобы я мог оказаться в дыре, и ответ, вероятно, очень прост. В любом случае, если вы сможете пролить свет, предложить какой-либо совет или показать какие-либо примеры / инструменты, которые я могу использовать, я был бы очень благодарен.

Подождите, пока я перефразировал вопрос, я понял, что блок кода может работать, если Я положил его внутрь setInterval(). Как то так:

setInterval(() => {
    const time = moment();
    if(time >= reminderArray[0].notificationTime){
        bot.sendMessage(reminderArray[0].message);
        reminderArray.shift();
    }     

},6000)

1 Ответ

0 голосов
/ 20 апреля 2020

как насчет setTimeout функции? Вы можете заключить в setTimeout свою функцию, и ваша функция будет вызываться через N миллисекунд, функцию первого аргумента, секунду, время в миллисекундах, например:

setTimeout(() => {
    console.log('I remind you');
}, 1000) 

В первом случае напомните мне через x минут , вы можете использовать предыдущий, для второго случая: напомните мне, чтобы я делал 30-е апреля в 9:00 утра ", вы можете использовать что-то вроде этого:

const reminder = (time) => //argument time in milliseconds which user set
 const now = Date.now();
 setTimeout(() => {
        console.log('I remind you');
    }, now + time - now) 

Для получения дополнительной информации о Date.now и setTimeout визит: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Date/now https://developer.mozilla.org/ru/docs/Web/API/WindowTimers/setTimeout

Надеюсь, я смогу вам помочь!

...