LendAndRegret/node_modules/es-toolkit/dist/function/throttle.js
2026-05-02 17:27:43 +08:00

32 lines
931 B
JavaScript

'use strict';
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const debounce = require('./debounce.js');
function throttle(func, throttleMs, { signal, edges = ['leading', 'trailing'] } = {}) {
let pendingAt = null;
const debounced = debounce.debounce(function (...args) {
pendingAt = Date.now();
func.apply(this, args);
}, throttleMs, { signal, edges });
const throttled = function (...args) {
if (pendingAt == null) {
pendingAt = Date.now();
}
if (Date.now() - pendingAt >= throttleMs) {
pendingAt = Date.now();
func.apply(this, args);
debounced.cancel();
debounced.schedule();
return;
}
debounced.apply(this, args);
};
throttled.cancel = debounced.cancel;
throttled.flush = debounced.flush;
return throttled;
}
exports.throttle = throttle;