debouce.ts 748 B

1234567891011121314151617181920212223242526272829
  1. const debounces = new WeakMap();
  2. const throttles = new WeakMap();
  3. export function debounce(fn: Function, delay: number, params?: any) {
  4. let cache: any = debounces.get(fn);
  5. if (cache) {
  6. clearTimeout(cache.timer);
  7. } else {
  8. cache = {};
  9. debounces.set(fn, cache);
  10. }
  11. return new Promise((resolve, reject) => {
  12. cache.timer = setTimeout(async () => {
  13. resolve(await fn(params));
  14. debounces.delete(fn);
  15. }, delay);
  16. });
  17. }
  18. export async function throttle(fn: Function, delay: number, params?: any) {
  19. const now = new Date().getTime();
  20. const start: number = debounces.get(fn);
  21. throttles.set(fn, now);
  22. if (start && now - start < delay) {
  23. return;
  24. }
  25. return await fn(params);
  26. }