hd-utils
Version:
A handy utils for modern JS developers
26 lines (25 loc) • 709 B
JavaScript
export default function debouncePromise(callback, wait) {
let state = undefined;
return (...args) => {
if (!state) {
state = {};
state.promise = new Promise((resolve, reject) => {
state.resolve = resolve;
state.reject = reject;
});
}
clearTimeout(state.timeout);
state.latestArgs = args;
state.timeout = setTimeout(() => {
const s = state;
state = undefined;
try {
s.resolve(callback(...s.latestArgs));
}
catch (e) {
s.reject(e);
}
}, wait);
return state.promise;
};
}