UNPKG

maplibre-gl

Version:

BSD licensed community fork of mapbox-gl, a WebGL interactive maps library

45 lines (40 loc) 1.14 kB
/** * Invokes the wrapped function in a non-blocking way when trigger() is called. Invocation requests * are ignored until the function was actually invoked. * * @private */ class ThrottledInvoker { _channel: MessageChannel; _triggered: boolean; _callback: Function; constructor(callback: Function) { this._callback = callback; this._triggered = false; if (typeof MessageChannel !== 'undefined') { this._channel = new MessageChannel(); this._channel.port2.onmessage = () => { this._triggered = false; this._callback(); }; } } trigger() { if (!this._triggered) { this._triggered = true; if (this._channel) { this._channel.port1.postMessage(true); } else { setTimeout(() => { this._triggered = false; this._callback(); }, 0); } } } remove() { delete this._channel; this._callback = () => {}; } } export default ThrottledInvoker;