之前我有我的控制器类,它正在创建服务的实例并按如下所示调用服务方法“ synchronize”。 “ synchronize”方法完成后,rails用来将JSON消息呈现回我的node.js。
if @service.valid_connection?
@service.synchronize
render json: {
status: :unprocessable_entity,
errors: @service.message
}, status: :ok
else
render json: {
status: :unprocessable_entity,
errors: @event.errors.full_messages
}, status: :ok
end
但是,由于我的'synchronize'方法执行时间太长,因此我创建了一个延迟的作业,该任务需要执行'synchronize'任务。所以目前我的控制器看起来像这样
if @service.valid_connection?
::Events::WegSyncJob.perform_later(event_id, b_cancelled)
else
render json: {
status: :unprocessable_entity,
errors: @event.errors.full_messages
}, status: :ok
end
现在我无法在此处放置渲染JSON,因为它将在作业传递给delay_job之后立即执行,我在Job类中使用after_perform方法为:
after_perform do |job|
//below code is wrong
render json: {
status: :ok,
message: "Check notifications"
}, status: :ok
end
def perform(event_id, b_cancelled)
//call to synchronize
end
但是,我无法从Job类中调用“渲染”,因为只能从控制器中进行。完成此后台作业后,如何将JSON消息呈现回我的node.js(UI)?
答案 0 :(得分:0)
第1步。延迟的作业完成后,将必须将同步方法的输出保存到数据库中。
第2步。在“ UI”端,编写一种方法,该方法定期向服务器发送 GET 请求。
第3步。您的控制器方法检查数据库并返回'Nil'
或返回delay_job输出的JSON对象。