label-studio
Version:
Data Labeling Tool that is backend agnostic and can be embedded into your applications
29 lines (27 loc) • 780 B
JavaScript
/**
* Returns a function, that, as long as it continues to be invoked,
* will not be triggered. The function will be called after it
* stops being called for N milliseconds. If `immediate` is passed,
* trigger the function on the leading edge, instead of the trailing.
*
* @param {function} func
* @param {number} wait
* @param {boolean} immediate
*/
export function debounce(func, wait, immediate) {
let timeout;
return function() {
const context = this,
args = arguments;
const later = () => {
timeout = null;
if (!immediate) {
func.apply(context, args);
}
};
const callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}