为什么我得到**(EXIT)错误的返回值:: ok

sim*_*imo 0 elixir

我需要让GenServer监视器成为一项任务,因此,我这样做:

GenServer.call(server_pid, {:monitor_task, self()})
Run Code Online (Sandbox Code Playgroud)

在服务器中:

def handle_call({:monitor_task, task_pid}, _from, state) do
  ref = Process.monitor(task_pid)
  {:reply, ref, state}
end
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

** (stop) exited in: GenServer.call(#PID<0.768.0>, {:monitor_task, #PID<0.849.0>}, 5000)
    ** (EXIT) bad return value: :ok
Run Code Online (Sandbox Code Playgroud)

任何的想法?

bit*_*ker 7

handle_info调用Logger 的回调需要返回,{:noreply, state}或者{:stop, reason, state}对Logger的调用返回:ok,这是回调的无效返回值,并且是导致您看到的错误的原因.

  • 绝对是这个问题的正确答案。对于来到这里的其他人:我有相同的错误消息,但对我来说问题是,我忘记将状态与回复一起返回。到目前为止,当我应该在 handle_call 实现的最后一行返回 `{:reply, return_value, state}` 时,我返回了 `{:reply, return_value}` (3认同)