【问题标题】:How to create a time variable that is always updated如何创建始终更新的时间变量
【发布时间】:2020-04-20 16:53:17
【问题描述】:

我确定以前有人问过这个问题,但我似乎找不到任何有帮助的东西,我希望标题有意义,我是 javascript 和 node.js 的新手。简而言之,我正在为内部消息传递系统(如 slack)创建机器人。我的机器人是一个提醒机器人,因此用户可以输入关键字并说“在 10 分钟内提醒我‘x’”或“提醒我在 4 月 30 日上午 9:00 做‘y’”等。

在我看来,只有一个不断更新的全局时间变量是有意义的,例如:

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

将所有提醒推送到按提醒时间排序的全局队列中,然后在全局时间等于队列中第一项的时间时执行机器人发送消息。

我很难弄清楚如何实时更新全局时间变量。我研究了 cron 作业,但我不确定如何同时运行多个 cron 作业。

我不知道我是不是想太多了,这就像我在键盘上敲了 3 天,所以我可能只是在一个洞里,答案可能很简单。无论如何,如果您能提供任何启示、提供任何建议或展示任何我可以使用的示例/工具,我将不胜感激。

等等,当我重新表述这个问题时,我意识到如果我将代码块放在setInterval() 中,它就可以工作。像这样的:

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

},6000)

【问题讨论】:

  • "不断更新的全局时间变量" - 您是指获取当前时间的系统函数(Date.now()new Date() 在javascript中)?如果没有,请更好地表达您的问题。
  • 我想你想要currentDateTime >=,并检查过去的所有数组元素。
  • 您说得对,感谢您的帮助,对于问题含糊不清以及围绕问题的细节表示歉意。

标签: javascript node.js ecmascript-6 cron momentjs


【解决方案1】:

setTimeout 函数呢?你可以将你的函数包裹在 setTimeout 中,你的函数会在 N 毫秒后被调用,第一个参数函数,第二个,以毫秒为单位的时间,例如:

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

对于你的第一个案例,在 x 分钟内提醒我,你可以使用以前,对于第二个案例:提醒我在 4 月 30 日上午 9:00 做 'y'",你可以使用类似的东西:

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

希望能帮到你!

【讨论】:

    猜你喜欢
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2018-02-07
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多