バースト書き込みを受信するチャネルがあります。アクションをトリガーする前に、チャネルでの送信のバーストが終了するまで待ちたいと思います。
私はこの要点interval
を見てきましたが、バッファにデータがある場合は毎回出力を送信します:
func debounceChannel(interval time.Duration, output chan int) chan int {
input := make(chan int)
go func() {
var buffer int
var ok bool
// We do not start waiting for interval until called at least once
buffer, ok = <-input
// If channel closed exit, we could also close output
if !ok {
return
}
// We start waiting for an interval
for {
select {
case buffer, ok = <-input:
// If channel closed exit, we could also close output
if !ok {
return
}
case <-time.After(interval):
// Interval has passed and we have data, so send it
output <- buffer
// Wait for data again before starting waiting for an interval
buffer, ok = <-input
if !ok {
return
}
// If channel is not closed we have more data and start waiting for interval
}
}
}()
return input
}
私の場合、出力をトリガーまたは送信する前に、このバーストの入力チャネルで送信されるデータがなくなるまで待ちたいと思います。
どうすればこれを達成できますか?