374
export function throttle<I, O>(event: Event<I>, merge: (last: O | undefined, event: I) => O, delay?: number | typeof MicrotaskDelay, leading?: boolean, trailing?: boolean, leakWarningThreshold?: number, disposable?: DisposableStore): Event<O>;
375
export function throttle<I, O>(event: Event<I>, merge: (last: O | undefined, event: I) => O, delay: number | typeof MicrotaskDelay = 100, leading = true, trailing = true, leakWarningThreshold?: number, disposable?: DisposableStore): Event<O> {
376
>
let subscription: IDisposable;
event.ts
377
>
let output: O | undefined = undefined;
378
>
let handle: Timeout | undefined = undefined;
379
>
let numThrottledCalls = 0;
380
>
381
>
const options: EmitterOptions | undefined = {
382
>
leakWarningThreshold,
383
>
onWillAddFirstListener() {
384
>
subscription = event(cur => {
385
>
numThrottledCalls++;
386
>
output = merge(output, cur);
387
>
388
>
// If not currently throttling, fire immediately if leading is enabled
389
>
if (handle === undefined) {
390
>
if (leading) {
391
emitter.fire(output);
392
output = undefined;
393
numThrottledCalls = 0;
394
}
396
>
// Set up the throttle period
397
>
if (typeof delay === 'number') {
398
handle = setTimeout(() => {
399
// Fire on trailing edge if there were calls during throttle period