AashishChakravarty

AashishChakravarty

Timeout in nested async loading data

Hi,
I am using Async Operations for nested data loading.

I am getting this issue.

[error] GenServer #PID<0.1134.0> terminating
** (stop) exited in: GenServer.call(#PID<0.1124.0>, {:phoenix, :child_mount, #PID<0.1134.0>, []}, 5000)
    ** (EXIT) time out
    (elixir 1.15.5) lib/gen_server.ex:1074: GenServer.call/3
    (phoenix_live_view 0.20.0) lib/phoenix_live_view/channel.ex:1227: Phoenix.LiveView.Channel.sync_with_parent/2
    (phoenix_live_view 0.20.0) lib/phoenix_live_view/channel.ex:1206: Phoenix.LiveView.Channel.mount_private/6
    (phoenix_live_view 0.20.0) lib/phoenix_live_view/channel.ex:1120: Phoenix.LiveView.Channel.verified_mount/8
    (phoenix_live_view 0.20.0) lib/phoenix_live_view/channel.ex:84: Phoenix.LiveView.Channel.handle_info/2
    (stdlib 5.0.2) gen_server.erl:1077: :gen_server.try_handle_info/3
    (stdlib 5.0.2) gen_server.erl:1165: :gen_server.handle_msg/6
    (stdlib 5.0.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3
Last message: {Phoenix.Channel, %{"params" => %{"_csrf_token" => "RT1MdmI9VRohQjFvOxl2PjIfEyQUBzwv7oyA4ogQGwf8ip2NjOrwaWMW", "_mounts" => 0, "_track_static" => ["http://localhost:4000/assets/app.css", "http://localhost:4000/assets/app.js"]}, "session" => "SFMyNTY.g2gDaAJhBXQAAAAHdwJpZG0AAAAJc2VhcmNoYmFydwdzZXNzaW9udAAAAAB3CnBhcmVudF9waWRYdw1ub25vZGVAbm9ob3N0AAAEZAAAAAAAAAAAdwZyb3V0ZXJ3GUVsaXhpci5BZ3JvZ3JhbVdlYi5Sb3V0ZXJ3BHZpZXd3IEVsaXhpci5BZ3JvZ3JhbVdlYi5TZWFyY2hiYXJMaXZldwlyb290X3ZpZXd3IUVsaXhpci5BZ3JvZ3JhbVdlYi5QcmljZUxpdmUuU2hvd3cIcm9vdF9waWRYdw1ub25vZGVAbm9ob3N0AAAEZAAAAAAAAAAAbgYA0n9gdYsBYgABUYA.ylzLKHRc-L6-39_DSxgkeLIjd9OczQvmzCW4eqHnuLw", "static" => "SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAJc2VhcmNoYmFydwVmbGFzaHQAAAAAdwphc3NpZ25fbmV3am4GAON-YHWLAWIAAVGA.dUhUNCv0tZ0YvPzo_7ZwRhM8XJj_8lErNmUUuGzehCQ"}, {#PID<0.1116.0>, #Reference<0.354572577.3625451524.97946>}, %Phoenix.Socket{assigns: %{}, channel: Phoenix.LiveView.Channel, channel_pid: nil, endpoint: MyAppWeb.Endpoint, handler: Phoenix.LiveView.Socket, id: nil, joined: false, join_ref: "10", private: %{connect_info: %{session: %{"_csrf_token" => "rR57VR2Kf5WWRiDpXPaSuPqx"}}}, pubsub_server: MyApp.PubSub, ref: nil, serializer: Phoenix.Socket.V2.JSONSerializer, topic: "lv:searchbar", transport: :websocket, transport_pid: #PID<0.1116.0>}}
State: #Reference<0.354572577.3625451521.118581>

My Implementation
show.ex

  @impl true
  def mount(_params, _session, socket) do
    {:ok,
     socket
     |> assign(
       article: AsyncResult.loading(),
       article_list: AsyncResult.loading()
     )}
  end

  @impl true
  def handle_params(%{"slug" => slug} = params, _url, socket) do
    {context, entity_id} = get_slug_details(slug)

    {:noreply,
     socket
     |> assign(
       slug: slug,
       context: context,
       entity_id: entity_id
     )
     |> start_async(:fetch_article, fn ->
       get_article({context, entity_id})
     end)}
  end

  def handle_async(:fetch_article, {:ok, fetch_article}, socket) do
    %{article: article} = socket.assigns

    {:noreply,
     assign(socket,
       article: AsyncResult.ok(article, fetch_article)
     )
     |> start_async(:fetch_article_list, fn ->
       get_article_list(fetch_article.type)
     end)}
  end

  def handle_async(:fetch_article_list, {:ok, {_title, fetch_article_list}}, socket) do
    %{article_list: article_list} = socket.assigns

    {:noreply,
     assign(socket,
       article_list: AsyncResult.ok(article_list, fetch_article_list)
     )}
  end

  def handle_async(:fetch_article, {:exit, reason}, socket) do
    %{article: article} = socket.assigns
    {:noreply, assign(socket, :article, AsyncResult.failed(article, {:exit, reason}))}
  end

  def handle_async(:fetch_article_list, {:exit, reason}, socket) do
    %{article_list: article_list} = socket.assigns
    {:noreply, assign(socket, :article_list, AsyncResult.failed(article_list, {:exit, reason}))}
  end

.html.heex

<.async_result :let={article_list} assign={@article_list}>
  <:loading>Loading</:loading>
  <:failed :let={_reason}>there was an error loading</:failed>
  <.live_component
    module={MyApp.Components.ArticleListComponent}
    id="list"
    article_list={article_list}
  />
</.async_result>

Please help me. what is wrong in my implementation.

Where Next?

Popular in Questions Top

electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a &gt; b) do {:ok, "a"} end if (a &lt; b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
marius95
Hello everyone, I try to use an Javascript Event Handler in my root.html.leex file. Therefore I created a function in the app.js file: ...
New

Other popular topics Top

minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 31525 112
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

We're in Beta

About us Mission Statement