UNPKG

@uppy/utils

Version:

Shared utility functions for Uppy Core and plugins maintained by the Uppy team.

36 lines (35 loc) 1.15 kB
/** * Helper to abort upload requests if there has not been any progress for `timeout` ms. * Create an instance using `timer = new ProgressTimeout(10000, onTimeout)` * Call `timer.progress()` to signal that there has been progress of any kind. * Call `timer.done()` when the upload has completed. */ class ProgressTimeout { #aliveTimer; #isDone = false; #onTimedOut; #timeout; constructor(timeout, timeoutHandler) { this.#timeout = timeout; this.#onTimedOut = () => timeoutHandler(timeout); } progress() { // Some browsers fire another progress event when the upload is // cancelled, so we have to ignore progress after the timer was // told to stop. if (this.#isDone) return; if (this.#timeout > 0) { clearTimeout(this.#aliveTimer); this.#aliveTimer = setTimeout(this.#onTimedOut, this.#timeout); } } done() { if (!this.#isDone) { clearTimeout(this.#aliveTimer); this.#aliveTimer = undefined; this.#isDone = true; } } } export default ProgressTimeout;