我正在使用Phoenix elixir構建web應用程序,其中我的web應用程序需要加載索引頁,而不是在後臺等待接收消息。這是我的代碼,我有問題Elixir Phoenix遞歸函數停止頁面加載
defmodule ApplicationB.PageController do
use ApplicationB.Web, :controller
use AMQP
def index(conn, _params) do
{:ok, connection} = AMQP.Connection.open
{:ok, channel} = AMQP.Channel.open(connection)
AMQP.Queue.declare(channel, "hello")
AMQP.Basic.consume(channel, "hello", nil, no_ack: true)
IO.puts " [*] Waiting for messages. To exit press CTRL+C, CTRL+C"
wait_for_messages
render conn, "index.html"
end
def wait_for_messages do
receive do
{:basic_deliver, payload, _meta} ->
IO.puts " [x] Received #{payload}"
ApplicationB.Endpoint.broadcast! "message", "hello", %{body: "poruka"}
wait_for_messages
end
end
end
我知道,我的問題是我的wait_for_messages函數內,因爲當我打電話內指數wait_for_messages它是遞歸函數,它從來沒有達到render conn, "index.html"
線。有什麼辦法可以使它工作,這樣可以加載頁面inde.html,並且wait_for_messages在後臺運行?
最簡單的方法是使用'spawn'或'spawn_link'(http://elixir-lang.org/docs/stable/elixir/Kernel.html#spawn/1),但我不會發布這個作爲正確方法的答案通常是在某處使用Supervisor來處理錯誤,對於簡單情況可能使用Task.Supervisor。 – Dogbert
但是,如果我使用spawn或spawn_link也停止我的頁面內容加載,只是在後臺運行功能 –