<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://elixirblocks.com/index.php?action=history&amp;feed=atom&amp;title=Phoenix_LiveView_Async_Assigns</id>
	<title>Phoenix LiveView Async Assigns - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://elixirblocks.com/index.php?action=history&amp;feed=atom&amp;title=Phoenix_LiveView_Async_Assigns"/>
	<link rel="alternate" type="text/html" href="http://elixirblocks.com/index.php?title=Phoenix_LiveView_Async_Assigns&amp;action=history"/>
	<updated>2026-06-02T07:35:57Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>http://elixirblocks.com/index.php?title=Phoenix_LiveView_Async_Assigns&amp;diff=1845&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;== Example==  &lt;source&gt; defmodule AppWeb.PageLive do   use AppWeb, :live_view    alias Phoenix.LiveView.AsyncResult   @impl true   def mount(_params, _session, socket) do     {:ok,      assign_async(socket, :number, fn -&gt; {:ok, %{number: really_complicated_function()}} end)}   end    @impl true   def handle_event(&quot;generate_number&quot;, _, socket) do     {:noreply,      socket      |&gt; assign(:number, AsyncResult.loading())      |&gt; start_async(:get_random_number, fn -&gt; really_c...&quot;</title>
		<link rel="alternate" type="text/html" href="http://elixirblocks.com/index.php?title=Phoenix_LiveView_Async_Assigns&amp;diff=1845&amp;oldid=prev"/>
		<updated>2024-06-29T05:07:52Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Example==  &amp;lt;source&amp;gt; defmodule AppWeb.PageLive do   use AppWeb, :live_view    alias Phoenix.LiveView.AsyncResult   @impl true   def mount(_params, _session, socket) do     {:ok,      assign_async(socket, :number, fn -&amp;gt; {:ok, %{number: really_complicated_function()}} end)}   end    @impl true   def handle_event(&amp;quot;generate_number&amp;quot;, _, socket) do     {:noreply,      socket      |&amp;gt; assign(:number, AsyncResult.loading())      |&amp;gt; start_async(:get_random_number, fn -&amp;gt; really_c...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Example==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
defmodule AppWeb.PageLive do&lt;br /&gt;
  use AppWeb, :live_view&lt;br /&gt;
&lt;br /&gt;
  alias Phoenix.LiveView.AsyncResult&lt;br /&gt;
  @impl true&lt;br /&gt;
  def mount(_params, _session, socket) do&lt;br /&gt;
    {:ok,&lt;br /&gt;
     assign_async(socket, :number, fn -&amp;gt; {:ok, %{number: really_complicated_function()}} end)}&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  @impl true&lt;br /&gt;
  def handle_event(&amp;quot;generate_number&amp;quot;, _, socket) do&lt;br /&gt;
    {:noreply,&lt;br /&gt;
     socket&lt;br /&gt;
     |&amp;gt; assign(:number, AsyncResult.loading())&lt;br /&gt;
     |&amp;gt; start_async(:get_random_number, fn -&amp;gt; really_complicated_function() end)}&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  @impl true &lt;br /&gt;
  def handle_async(:get_random_number, {:ok, res}, socket) do&lt;br /&gt;
    %{number: number} = socket.assigns&lt;br /&gt;
    {:noreply, assign(socket, :number, AsyncResult.ok(number, res))}&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def handle_async(:get_random_number, {:exit, _reason}, socket) do&lt;br /&gt;
    %{number: number} = socket.assigns&lt;br /&gt;
&lt;br /&gt;
    {:noreply,&lt;br /&gt;
     assign(socket, :number, AsyncResult.failed(number, &amp;quot;Failed to generate a number.&amp;quot;))}&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  @impl true&lt;br /&gt;
  def render(assigns) do&lt;br /&gt;
    ~H&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;flex justify-center items-center h-screen bg-gradient-to-r from-blue-500 to-purple-600&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;text-center bg-white shadow-lg rounded-lg p-10&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 class=&amp;quot;text-4xl font-bold text-gray-800 mb-5&amp;quot;&amp;gt;Random Number Generator&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Display Area --&amp;gt;&lt;br /&gt;
        &amp;lt;.async_result :let={number} assign={@number}&amp;gt;&lt;br /&gt;
          &amp;lt;:loading&amp;gt;&lt;br /&gt;
            &amp;lt;div&lt;br /&gt;
              class=&amp;quot;spinner-border animate-spin inline-block w-8 h-8 border-4 rounded-full text-blue-700&amp;quot;&lt;br /&gt;
              role=&amp;quot;status&amp;quot;&lt;br /&gt;
            &amp;gt;&lt;br /&gt;
              &amp;lt;span class=&amp;quot;visually-hidden&amp;quot;&amp;gt;Loading...&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/:loading&amp;gt;&lt;br /&gt;
          &amp;lt;:failed :let={_reason}&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;mt-5 text-red-500&amp;quot;&amp;gt;&lt;br /&gt;
              Failed to generate a number.&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/:failed&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div  class=&amp;quot;text-6xl font-bold text-green-600 mb-5&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;%= number %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;button&lt;br /&gt;
            phx-click=&amp;quot;generate_number&amp;quot;&lt;br /&gt;
            class=&amp;quot;bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded transition duration-300 ease-in-out transform hover:scale-105&amp;quot;&lt;br /&gt;
          &amp;gt;&lt;br /&gt;
            Generate Random Number&lt;br /&gt;
          &amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;/.async_result&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def really_complicated_function() do&lt;br /&gt;
    # Simulate a really complicated function, takes a long time to run and will fail sometimes&lt;br /&gt;
    :timer.sleep(1000)&lt;br /&gt;
&lt;br /&gt;
    if Enum.random(1..10) &amp;gt; 5 do&lt;br /&gt;
      :error&lt;br /&gt;
    else&lt;br /&gt;
      Enum.random(1..100)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>