jarvism

jarvism

Hello, all!
I need to be able to get POST data in my Phoenix API, acknowledge as quickly as possible, then use the POST data to process in another function.
My controller looks like this:

def just_ack(conn, params) do

    process_data(params)

    json(conn, %{ack: "Attempting to process data"})
  end
...
defp process_data(params) do

    # Process the params data
  end

But this waits for process_data to complete before returning. What is the right way to get the POST data, ack quickly, then process the data?

Thank you in advance!

Showing Posts 1 to 4

dimitarvp

dimitarvp

Just spawn a new process to do the work in the background?

krasenyp

krasenyp

If you want to supervise the processing, you can employ a Task.Supervisor and start children in your controller.

jarvism

jarvism OP

Thanks for this, @dimitarvp!
I did not know about this. I was able to read some of your other answers to similar questions and get a solution in place.

jarvism

jarvism OP

In case it’s useful for anyone landing here later…
I ended up making my controller like this:

def send_msg(conn, params) do
    # Use Task to handle send msg in background
    # while returning ASAP
    Task.start_link(fn ->
      IO.puts "I am running in a task"
      sendMsg(params)
    end)

    IO.puts("EXIT send_msg")
    json(conn)
  end

and the logs show “EXIT send_msg” before “I’m running in a task.” This is great for me because I need the API call to “fire and forget”, as the Task documentation describes:

We encourage developers to rely on supervised tasks as much as possible… Here is a summary:

and here:

By default, the functions Task.start and Task.start_link are for fire-and-forget tasks, where you don’t care about the results or if it completes successfully or not.

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews