作业完成后回显响应-作业延迟

时间:2020-06-19 09:57:35

标签: ruby-on-rails response sidekiq delayed-job rails-activejob

之前我有我的控制器类,它正在创建服务的实例并按如下所示调用服务方法“ 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)?

1 个答案:

答案 0 :(得分:0)

第1步。延迟的作业完成后,将必须将同步方法的输出保存到数据库中。

第2步。在“ UI”端,编写一种方法,该方法定期向服务器发送 GET 请求。

第3步。您的控制器方法检查数据库并返回'Nil'或返回delay_job输出的JSON对象。