You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

timer.go 549B

123456789101112131415161718192021222324252627282930313233343536
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package util
  4. import (
  5. "sync"
  6. "time"
  7. )
  8. func Debounce(d time.Duration) func(f func()) {
  9. type debouncer struct {
  10. mu sync.Mutex
  11. t *time.Timer
  12. }
  13. db := &debouncer{}
  14. return func(f func()) {
  15. db.mu.Lock()
  16. defer db.mu.Unlock()
  17. if db.t != nil {
  18. db.t.Stop()
  19. }
  20. var trigger *time.Timer
  21. trigger = time.AfterFunc(d, func() {
  22. db.mu.Lock()
  23. defer db.mu.Unlock()
  24. if trigger == db.t {
  25. f()
  26. db.t = nil
  27. }
  28. })
  29. db.t = trigger
  30. }
  31. }