Hi,
I have a list, where I have to generate a pdf for each value in the list and keep track of which pdf is getting generated to display on UI (using socket assign).
I have two issues:
-
It’s working fine for some time but after some time page is reloading and giving this error
received timeout while communicating with server. Falling back to hard refresh for recovery
while pdfs are getting generated in the background.
It works fine when I remove PuppeteerPdf.Generate code -
I am unable to update the value (current_pdf) in the loop.
for x <- results.fetch_data do
handle_single_item(x,socket)
end
def handle_single_item(value,socket)do
// fetch_kyc is another async fn.
result= Task.async(fn ->fetch_kyc(value,socket) end)
awaited_result = Task.await(result, :infinity)
//print_pdf fn is to generate pdfs
pdf_result = Task.async(fn -> print_pdf(socket, awaited_result) end )
Task.await(pdf_result, :infinity)
{: ok, socket}
end
def print_pdf(socket,result)do
html = Task.async(fn -> Phoenix.View.render_to_string(
CrmUpdatedWeb.HomeView,
"template.html", formdata: result, socket: socket
) end)
awaited_html = Task.await(html, :infinity)
name = :rand.uniform(256)
socket= assign(socket, :current_pdf, name)
// Using PuppeteerPdf to generate pdf
result= PuppeteerPdf.Generate.from_string(awaited_html, "../RANDOM#{name}.pdf", [print_background: true,
timeout: 20000
] )
{: no reply, socket}
end
Thanks.