UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

37 lines (36 loc) 1.11 kB
import {createTimeout} from "../../../../../../misc/timer/create-timeout.mjs"; export function throttleTimeObservable(subscribe, duration, {leading = true, trailing = true} = {}) { return emit => { let lastSendValueTime = leading ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY; let abortTimeout = null; let trailingValue; const _emit = value => { lastSendValueTime = Date.now(); emit(value); }; const unsubscribe = subscribe(value => { const elapsedTime = Math.max(0, Date.now() - lastSendValueTime); if (elapsedTime >= duration) { if (abortTimeout !== null) { abortTimeout(); abortTimeout = null; } _emit(value); } else if (trailing) { trailingValue = value; if (abortTimeout === null) { abortTimeout = createTimeout(() => { abortTimeout = null; _emit(trailingValue); }, duration - elapsedTime); } } }); return () => { unsubscribe(); if (abortTimeout !== null) { abortTimeout(); } }; }; }