下面是debounce
Underscore.js 中函数的描述:
创建并返回传递函数的新去抖动版本,该版本将推迟其执行,直到自上次调用以来等待毫秒过去后。对于实现仅在输入停止到达后才应发生的行为很有用。例如:渲染 Markdown 注释的预览,在窗口停止调整大小后重新计算布局等等。
有没有一种简单的方法可以使用 watchr 来实现这种行为?我正在编辑数据库文件,所以我无法控制它何时保存。当我完成编辑时,我想用 ruby 做一些事情。
不是那么简单的解决方案 - 使用Thread
:
class Debouncer
def initialize(seconds, &block)
@seconds = seconds
@block = block
end
def register_event
Thread.kill(@thread) unless @thread.nil?
@thread = Thread.new do
sleep @seconds
@block.call
end
end
end
debouncer = Debouncer.new(30) { do_thing }
watch( 'venus/database/(.*)' ) {|md| debouncer.register_event()}