useBuffer.js 670 B

123456789101112131415161718192021222324252627282930
  1. export default ((callback, buffer) => {
  2. let called = false;
  3. let timeout = null;
  4. function cancelTrigger() {
  5. clearTimeout(timeout);
  6. }
  7. function trigger(force) {
  8. if (!called || force === true) {
  9. if (callback() === false) {
  10. // Not delay since callback cancelled self
  11. return;
  12. }
  13. called = true;
  14. cancelTrigger();
  15. timeout = setTimeout(() => {
  16. called = false;
  17. }, buffer.value);
  18. } else {
  19. cancelTrigger();
  20. timeout = setTimeout(() => {
  21. called = false;
  22. trigger();
  23. }, buffer.value);
  24. }
  25. }
  26. return [trigger, () => {
  27. called = false;
  28. cancelTrigger();
  29. }];
  30. });