初始化几分钟后,我需要更改一个类的属性。我试图在函数中使用sleep,但它延迟了所有内容的执行:

active = true

def deactivate
  sleep 120
  puts 'deactivate'
  active = false
end

deactivate
puts active

我希望发生的情况是true首先注销,然后两分钟后deactivate将注销。但是,发生的事情是deactivate,然后在两分钟后注销false

在JavaScript中,我将执行以下操作:
var active = true;
setTimeout(function(){
  console.log('deactivate');
  active = false;
},120000);
console.log(active);

最佳答案

对于此任务来说看起来有些过分,但是您可以使用delayed_job在以后的某个时间异步运行任务。

  def deactivate
     puts 'deactivate'
     active = false
  end

  active = true
  handle_asynchronously :deactivate, :run_at => Proc.new { 2.minutes.from_now }

10-08 06:35