aretherecookies-mobile/js/helpers/debounce.js
2020-03-29 19:47:33 +00:00

24 lines
473 B
JavaScript

// @flow
export default <T>(fn: Function, delay?: number = 100): (() => Promise<T>) => {
let cacheTimeout;
let cachedResult;
return (...args) => {
if (cacheTimeout) {
clearTimeout(cacheTimeout);
}
if (!cachedResult) {
cachedResult = new Promise((resolve, reject) => {
try {
resolve(fn(...args));
} catch (err) {
reject(err);
}
});
}
cacheTimeout = setTimeout(() => (cachedResult = null), delay);
return cachedResult;
};
};