watchr:当文件停止更改时,是否可以执行某些操作?

时间:2012-06-01 02:56:20

标签: ruby watchr

以下是Underscore.js中debounce函数的说明:

  

创建并返回传递函数的新debounced版本,该函数将推迟执行,直到自上次调用之后经过等待毫秒。用于实现仅在输入停止到达后才会发生的行为。例如:呈现Markdown注释的预览,在窗口停止调整大小后重新计算布局,等等。

使用watchr有一种简单的方法来实现这种行为吗?我正在编辑数据库文件,因此我无法控制它何时保存。当我完成编辑时,我想用ruby做点什么。

1 个答案:

答案 0 :(得分:1)

不是那么简单的解决方案 - 使用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()}