(Вот ответ от @schrockwell из канала Elixir Liveview Slack.)
Вам нужно иметь назначение, которое отслеживает состояние «чтения», например, простое логическое значение, и назначается непосредственно в handle_event, а затем порождает некоторый процесс (например, Task), который выполняет поиск в БД и отправляет сообщение обратно процессу LiveView, когда поиск завершается
def handle_event("some_event", params, socket) do
live_view = self()
Task.start(fn ->
result = do_the_db_lookup_here()
send(live_view, {:db_result, result})
end)
{:noreply, assign(socket, busy: true)}
end
def handle_info({:db_result, result}, socket) do
{:noreply, assign(socket, result: result, busy: false)}
end