Source: timed-handler.js

/**
 * _Private_ helper class for managing timed handlers.
 *
 * A Strophe.TimedHandler encapsulates a user provided callback that
 * should be called after a certain period of time or at regular
 * intervals.  The return value of the callback determines whether the
 * Strophe.TimedHandler will continue to fire.
 *
 * Users will not use Strophe.TimedHandler objects directly, but instead
 * they will use {@link Strophe.Connection#addTimedHandler|addTimedHandler()} and
 * {@link Strophe.Connection#deleteTimedHandler|deleteTimedHandler()}.
 *
 * @memberof Strophe
 */
class TimedHandler {
    /**
     * Create and initialize a new Strophe.TimedHandler object.
     * @param {number} period - The number of milliseconds to wait before the
     *     handler is called.
     * @param {Function} handler - The callback to run when the handler fires.  This
     *     function should take no arguments.
     */
    constructor(period, handler) {
        this.period = period;
        this.handler = handler;
        this.lastCalled = new Date().getTime();
        this.user = true;
    }

    /**
     * Run the callback for the Strophe.TimedHandler.
     *
     * @return {boolean} Returns the result of running the handler,
     *  which is `true` if the Strophe.TimedHandler should be called again,
     *  and `false` otherwise.
     */
    run() {
        this.lastCalled = new Date().getTime();
        return this.handler();
    }

    /**
     * Reset the last called time for the Strophe.TimedHandler.
     */
    reset() {
        this.lastCalled = new Date().getTime();
    }

    /**
     * Get a string representation of the Strophe.TimedHandler object.
     * @return {string}
     */
    toString() {
        return '{TimedHandler: ' + this.handler + '(' + this.period + ')}';
    }
}

export default TimedHandler;