mirror of
https://gitlab.com/wheres-the-tp/ui-mobile.git
synced 2026-01-25 07:44:54 -06:00
24 lines
473 B
JavaScript
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;
|
|
};
|
|
};
|