包含持续时间值的JS变量

时间:2016-07-21 02:46:28

标签: javascript timer counter hubot

我正在使用聊天机器人脚本(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

2 个答案:

答案 0 :(得分:0)

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

的伪代码:

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

答案 1 :(得分:0)

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);
}