Force execution in tickAndDebounce after debounceTime
parent
26de7eb384
commit
7d6a9ae663
14
blockbook.go
14
blockbook.go
|
@ -255,6 +255,7 @@ func main() {
|
|||
|
||||
func tickAndDebounce(tickTime time.Duration, debounceTime time.Duration, input chan struct{}, f func()) {
|
||||
timer := time.NewTimer(tickTime)
|
||||
var firstDebounce time.Time
|
||||
Loop:
|
||||
for {
|
||||
select {
|
||||
|
@ -266,12 +267,21 @@ Loop:
|
|||
if !ok {
|
||||
break Loop
|
||||
}
|
||||
// debounce for debounceTime
|
||||
timer.Reset(debounceTime)
|
||||
if firstDebounce.IsZero() {
|
||||
firstDebounce = time.Now()
|
||||
}
|
||||
// debounce for up to debounceTime period
|
||||
// afterwards execute immediately
|
||||
if firstDebounce.Add(debounceTime).After(time.Now()) {
|
||||
timer.Reset(debounceTime)
|
||||
} else {
|
||||
timer.Reset(0)
|
||||
}
|
||||
case <-timer.C:
|
||||
// do the action and start the loop again
|
||||
f()
|
||||
timer.Reset(tickTime)
|
||||
firstDebounce = time.Time{}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue