【发布时间】:2018-04-13 05:42:26
【问题描述】:
我有以下执行顺序。当 import 被调用时,它会依次调用 perform_tasks,然后在 on_complete 上进入 redis 订阅循环:
class Record < ActiveRecord::Base
def self.import(params)
peform_tasks params[:record]
on_complete
end
def self.peform_tasks(record_params)
record_params.each do |param|
AddressWorker.perform_async param
end
end
def self.on_complete
redis.subscribe('address_notifier') do |payload|
on_post_execute payload
end
puts 'BUT WE NEVER GET HERE'
end
def self.on_post_execute(payload)
puts 'Yes we get here'
end
end
问题是当块完成执行,并且 on_post_execute 运行时,执行不会离开块。而且我们从不排队:
puts 'BUT WE NEVER GET HERE'
我们为什么不到达块后面的那一行?
请注意,使用 ruby redis gem 中的redis.subscribe 在这里应该无关紧要,因为我到达了块,它是一个常规的 ruby 块。
【问题讨论】:
标签: ruby-on-rails ruby