我在我的應用程序中使用庫,它定期返回{:ok, value}
或{:error, error}
的元組。在我們假設可能有錯誤(例如用戶輸入)的情況下,我們正在明確處理這些情況。對於所有其他情況,我寧願假設他們將得到妥善處理,如果沒有,則通過重定向處理失敗案例。我如何處理鳳凰城的全球自定義錯誤?
我開始嘗試用一個函數來解決這個問題:
def show(conn, %{"id" => id}) do
user = client.user_show(conn.assigns.endpoint, id) |> get_value(conn)
# rest of method omitted
end
def get_value({:ok, value}, _conn), do: value
def get_value({:error, value}, conn) do
conn
|> put_flash(:error, "Client error")
|> redirect(to: "/")
|> halt
end
這似乎是個好主意,但不幸的是,在美國康涅狄格州仍在繼續,儘管停止。這是有道理的,因爲代碼路徑沒有分割。
所以看來更好的解決方案是實現此功能來引發特定的錯誤,然後嘗試全局解決它。
不幸的是,我找不到一種方法來處理菲尼克斯在全球範圍內的錯誤。我看到的唯一可能的選擇是使用ErrorView
,但我不想只顯示錯誤,我想根據錯誤進行適當的重定向。
我錯過了什麼,或者目前在鳳凰城這是不可能的嗎?