Why can't I spawn() here? (error)

I have a GenStage and all I’m trying to do is spawn a process inside handle_events. Ultimately I want handle_events to return [] and then via message passing of the spawn() handle sending the events myself when they complete

def handle_events(users, _from, state) do
  endpoints = Config.get()[:endpoints]

  for user <- users do
    spawn(fn (user) -> do_user_bidding(user, endpoints) end)
  end

  {:noreply, [], state}
end

The error I get is

handle_events/3> with arity 1 called with no arguments

Hey 9mm. For the future, please provide a full error message and stack trace when asking questions, it makes a big difference.

After some looking through I identified your issue:

spawn(fn (user) -> do_user_bidding(user, endpoints) end)

should be

spawn(fn -> do_user_bidding(user, endpoints) end)

The function you pass to spawn needs to be arity 0.

if I do that it says

19:50:14.411 [error] Task #PID<0.365.0> started from #PID<0.318.0> terminating
** (BadArityError) #Function<4.86334033/1 in MyApp.EndpointAggregator.do_user_bidding/2> with arity 1 called with no arguments
    :erlang.apply/2
    (elixir) lib/task/supervised.ex:89: Task.Supervised.do_apply/2
    (elixir) lib/task/supervised.ex:38: Task.Supervised.reply/5
    (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Function: &:erlang.apply/2
    Args: [#Function<4.86334033/1 in MyApp.EndpointAggregator.do_user_bidding/2>, []]

Is the code you’re showing what you actually have? Your stack trace talks about task pids but you don’t show anything using tasks.

ugh crap… so that first problem you had me fix was the actual problem. I thought that was the ‘fixed’ way but it turns out I broke it. You helped me fix it, and now the broken code is in the function being called (I use tasks inside that do_user_bidding function)

Thank you!!

Real fast, do you know how to write this in Elixir? I’m confused on the #{} part

buoy:get(Url, #{timeout => 500}).

This is what i had so far…

:buoy.get(url, ...)

It works without the 2nd argument but then freezes

I keep getting 20:07:12.836 [error] Bad value on output port ‘tcp_inet’

and then my whole terminal freezes

Hmm… i have tried every combination I can think of. I have no idea what #{} is and i googling isnt all helpful for symbols

It’s the map syntax for erlang. :buoy.get(url, %{timeout: 500}).

yeah so weird, it just freezes. without it it works fine. I guess ill figure it out later