【问题标题】:JS variable containing ongoing time value包含持续时间值的 JS 变量
【发布时间】:2016-07-21 02:46:27
【问题描述】:

我正在做一个聊天机器人脚本(Hubot - 在终端中运行)练习,并寻找一种方法来计算自从最后一条消息留在线程中以来的时间。然后在没有人留言 X 分钟(比如说 10,000 毫秒)后,我想 console.log("CRICKETS!..CRICKETS!..")

我在想象这样的事情:

//currentTime - startTime = timeSince
//and 
// if( timeSince > 10,000) 
//    {console.log("Crickets!..")

但是我不确定如何将 currentTime 变量创建为持续增长的计数器

下面是我开始的代码,它似乎没有在 中引发任何错误,但在我在终端中运行时似乎也不起作用。它只是将当前时间打印两次

module.exports = function(robot) {
  return robot.hear(/$/i, function(msg) {
    var startTime = (Date.now()) ;
    return(startTime);

  if (Date.now() - startTime > 1000) {
  console.log("CRICKETS..!...")
  };
  });
};

您会注意到我正在使用 Date.now() 但如果有更好的方法,我不会附加。这里还有一个基本hubot脚本的链接,以防上下文需要它 - https://github.com/github/hubot/blob/master/docs/scripting.md

【问题讨论】:

  • setTimeout 函数允许您在延迟后触发回调函数。

标签: javascript timer counter hubot


【解决方案1】:

您可以随时使用setTimeout 并在需要时取消它

伪代码:

var myTimeout = setTimeout(function () {
   //nobody has left a message for 10 seconds
}, 10000);
if (user has left message)
    clearTimeout(myTimeout);

【讨论】:

    【解决方案2】:

    window.setTimeout 函数允许您在延迟后触发回调函数。您可以通过调用 window.clearTimeout(value_returned_by_setTimeout) 来清除该超时。

    我们可以定义一个回调:function crickets(){ console.log('Chirp! Chirp!'); }

    假设每当出现新消息时都会调用某个函数newMessage,您可以尝试这样的操作:

    var cricketTimeout = null;
    function newMessage(){
      //... your code
      if (cricketTimeout) clearTimeout(cricketTimeout);
      cricketTimeout = setTimeout(crickets, delayInMilliseconds);
    }
    

    【讨论】:

      猜你喜欢
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      相关资源
      最近更新 更多