如何同步运行Que::Job并获取其run方法的返回值?
能不能立即同步运行Que任务并获取run方法返回值?
默认情况下,Que::Job的.run方法不会直接执行run实例方法并返回其结果,它的作用是将任务入队并返回任务实例,这就是你看到返回值是FooJob类实例的原因。
如果想要同步执行任务并获取run方法的返回值,可以通过以下两种方式实现:
直接实例化任务并调用
run方法
跳过Que的入队逻辑,直接创建任务实例并执行run方法,就能拿到返回值:class FooJob < Que::Job def run puts "FooJob is called" 123 end end job_instance = FooJob.new supposedly_return_value = job_instance.run # => 123添加自定义类方法封装同步执行逻辑
如果希望保持类似.run的调用风格,可以给任务类添加一个自定义类方法:class FooJob < Que::Job def run puts "FooJob is called" 123 end def self.sync_run new.run end end supposedly_return_value = FooJob.sync_run # => 123
这两种方式都能实现同步执行任务并获取run方法返回值的需求,适合你提到的那些需要立即拿到结果的极少数场景。
内容的提问来源于stack exchange,提问作者Nikita Fedyashev
相关产品推荐
相关产品推荐

