Переменная JS, содержащая текущее значение времени

Я работаю над сценарием чат-бота (Hubot — работает в терминале) и ищу метод для подсчета времени, прошедшего с момента, когда последнее сообщение было оставлено в потоке. Затем, после того как никто не оставил сообщения в течение X минут (скажем, 10 000 миллисекунд), я хотел бы выполнить console.log("СВЕРЧКИ!..СВЕРЧКИ!..")

Я представляю что-то вроде:

//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


person user3756840    schedule 21.07.2016    source источник
comment
Функция setTimeout позволяет запускать функцию обратного вызова после задержки.   -  person A. Vidor    schedule 21.07.2016


Ответы (2)


Вы всегда можете использовать setTimeout и отменить его при необходимости.

Псевдокод:

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

Функция 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);
}
person A. Vidor    schedule 21.07.2016