36 lines · 549 B · Go
RawDownload
// Copyright 2020 The Gitea Authors. All rights reserved.// SPDX-License-Identifier: MIT package util import (	"sync"	"time") func Debounce(d time.Duration) func(f func()) {	type debouncer struct {		mu sync.Mutex		t  *time.Timer	}	db := &debouncer{} 	return func(f func()) {		db.mu.Lock()		defer db.mu.Unlock() 		if db.t != nil {			db.t.Stop()		}		var trigger *time.Timer		trigger = time.AfterFunc(d, func() {			db.mu.Lock()			defer db.mu.Unlock()			if trigger == db.t {				f()				db.t = nil			}		})		db.t = trigger	}}