/** * Handle timeouts greater than 32-bit signed integer */ class LongTimeout { constructor() { this.timeout = 0 this.timer = null } clear() { clearTimeout(this.timer) } /** * * @param {Function} fn * @param {number} timeout */ set(fn, timeout) { const maxValue = 2147483647 const handleTimeout = () => { if (this.timeout > 0) { let delay = Math.min(this.timeout, maxValue) this.timeout = this.timeout - delay this.timer = setTimeout(handleTimeout, delay) return } fn() } this.timeout = timeout handleTimeout() } } module.exports = LongTimeout