diff --git a/index.js b/index.js index 290cbd0..f78f468 100644 --- a/index.js +++ b/index.js @@ -3,9 +3,9 @@ */ try { - var date = require('date'); -} catch(e) { - var date = require('date.js'); + var date = require("date"); +} catch (e) { + var date = require("date.js"); } /** @@ -13,6 +13,10 @@ try { */ module.exports = every; +module.exports.clear = clear; + +var timers = {}; +var id = 0; /** * Initialize `every` @@ -23,7 +27,7 @@ module.exports = every; */ function every(str, fn) { - var now = new Date; + var now = new Date(); var d = date(str); var offset = d - now; var until = offset; @@ -32,7 +36,8 @@ function every(str, fn) { throw new Error('did not recognize "' + str + '"'); } - setTimeout(run, until); + let timerId = id++; + timers[timerId] = setTimeout(run, until); function run() { d = date(str); @@ -46,14 +51,20 @@ function every(str, fn) { function reset() { if (!offset) return; - now = new Date; + now = new Date(); until = d - now; // if we're already past the time, reset immediately if (until < 0) { run(); } else { - setTimeout(run, until); + timers[timerId] = setTimeout(run, until); } } + return timerId; +} + +function clear(id) { + clearTimeout(timers[id]); + delete timers[id]; }