/** * @param {Function} callback The function to call * @param {number} delay The time to wait */ export default function timer(callback, delay) { let id; let started; let remaining = delay; let running; this.start = function () { running = true; started = new Date(); id = setTimeout(callback, remaining); }; this.pause = function () { running = false; clearTimeout(id); remaining -= new Date() - started; }; this.clear = function () { running = false; clearTimeout(id); remaining = 0; }; this.getTimeLeft = function () { if (running) { this.pause(); this.start(); } return remaining; }; this.getStateRunning = function () { return running; }; this.start(); }