ProyectWeb.PageLiveView.handle_info/2 中没有匹配的函数子句
no function clause matching in ProyectWeb.PageLiveView.handle_info/2
我不知道如何匹配我的异步函数和我的 handle_info
此代码有效:
def order_month() do
Task.async(fn ->
(1..12)
|> Enum.map(fn a -> %{months: a} |> Map.put(:order_months, Proyect.BuyHandler.order_month(a |> Integer.to_string())
|> Enum.map(fn m -> m |> Proyect.BuyHandler.get_opc() end))end)
end)
end
我的目的是这样接收:
def handle_info({_ref, %{months: month, order_months: order_months}}, socket) do
{:noreply, assign(socket, %{months: month, order_months: order_months} )}
Task.async/1
is designed to yield results with Task.await/2
.
无论您是否希望通过 handle_info/2
接收返回的结果,您都应该明确地将结果从派生(例如使用 Kernel.spawn/1
)进程发送到父进程。
您没有显示 Proyect.BuyHandler.get_opc/1
的代码,但如果我们假设它做了一个简单的转换,我们可能会从那里发送消息(应该使用 Task.start/1
而不是 Task.async/1
在这种情况下启动未链接的过程。)沿着这些路线有点可行。
def order_month(pid) do
Task.start(fn ->
(1..12)
|> Enum.map(fn a ->
%{months: a,
order_months: Proyect.BuyHandler.order_month("#{a}")}
end)
|> Enum.map(&Proyect.BuyHandler.get_opc/1)
# ⇓⇓⇓⇓⇓ THIS ⇓⇓⇓⇓⇓
|> Enum.each(&send(pid, &1))
end)
end
在这种情况下,handle_info/2
本身应该有一个签名 def handle_info(%{}}, socket)
。
我不知道如何匹配我的异步函数和我的 handle_info
此代码有效:
def order_month() do
Task.async(fn ->
(1..12)
|> Enum.map(fn a -> %{months: a} |> Map.put(:order_months, Proyect.BuyHandler.order_month(a |> Integer.to_string())
|> Enum.map(fn m -> m |> Proyect.BuyHandler.get_opc() end))end)
end)
end
我的目的是这样接收:
def handle_info({_ref, %{months: month, order_months: order_months}}, socket) do
{:noreply, assign(socket, %{months: month, order_months: order_months} )}
Task.async/1
is designed to yield results with Task.await/2
.
无论您是否希望通过 handle_info/2
接收返回的结果,您都应该明确地将结果从派生(例如使用 Kernel.spawn/1
)进程发送到父进程。
您没有显示 Proyect.BuyHandler.get_opc/1
的代码,但如果我们假设它做了一个简单的转换,我们可能会从那里发送消息(应该使用 Task.start/1
而不是 Task.async/1
在这种情况下启动未链接的过程。)沿着这些路线有点可行。
def order_month(pid) do
Task.start(fn ->
(1..12)
|> Enum.map(fn a ->
%{months: a,
order_months: Proyect.BuyHandler.order_month("#{a}")}
end)
|> Enum.map(&Proyect.BuyHandler.get_opc/1)
# ⇓⇓⇓⇓⇓ THIS ⇓⇓⇓⇓⇓
|> Enum.each(&send(pid, &1))
end)
end
在这种情况下,
handle_info/2
本身应该有一个签名 def handle_info(%{}}, socket)
。