Streaming a .js.erb response
Streaming a .js.erb response
In this scenario, when the user submits his form,
the $("body .my-flash-div")
div should first show
$("body .my-flash-div")
Generating report
then after a few seconds
Sql executing
so on and so forth.
My issue is that the end user is shown the results at once, and not in a step by step manner. Here's my setup:
End users want to download reports
Report generation is a multi step process, takes 5-10 seconds.
Step 1 user does GET /users_report/new
There's a form there, user enters email address, submits
And it's handled by
class UsersReportController < ApplicationController
def create
respond_to do |format|
format.js
end
end
# app/views/users_report/create.js.erb
$("body .my-flash-div").html("Generating report");
<% Namespace::gen_report_step_1 %>
<% sleep 1 %>
$("body .my-flash-div").html("Sql executing");
<% Namespace::gen_report_step_2 %>
<% sleep 1 %>
$("body .my-flash-div").html("Post processing");
<% Namespace::gen_report_step_3 %>
<% sleep 1 %>
$("body .my-flash-div").html("gzip execute");
<% Namespace::gen_report_step_4 %>
<% sleep 1 %>
$("body .my-flash-div").html("Emailing "+params[:email]);
Can can I make this work, or should I look at actionable for this, if so how.
I added some sleep 1 calls to illustrate why setTimeout and .delay might not be appropriate
– american-ninja-warrior
12 mins ago
Yeah if you want to perform a bunch of tasks that might take time and have the client subscribe for updates you´ll want to use ActionCable. Otherwise the response is sent once the view is rendered in entirety.
– max
9 mins ago
can ActionCable::Live be used?
– american-ninja-warrior
3 mins ago
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
You can use window.setTimeout or jQuery.delay
– max
34 mins ago