簡體   English   中英

鹵素組件查詢中的throwError

[英]throwError in Halogen component queries

我與實現以下目標奮斗:我在他們返回一個期望值,或錯誤的方式輸入的API請求時的狀態代碼並沒有表示成功,或當身份驗證令牌已經無效等: Either String r

現在,在eval組件查詢時,我不想關心它。 我只對快樂路徑感興趣(諸如無效登錄嘗試之類的預期錯誤被認為是快樂路徑,只是想避免出現意外情況),並且應該對錯誤進行統一和全局處理(向總線發送一些通知)。

為此,我創建了變壓器堆棧:

type App = ReaderT Env (ExceptT String (Aff AppEffects))

現在,要將其與runUI一起使用,我需要提供與hoist一起使用的自然轉換(除非我錯過了其他可能性):

runApp :: Env -> App ~> Aff AppEffects
runApp env app = do
  res <- runExceptT $ runReaderT app env
  case res of
    Right r -> pure unit
    Left err -> do Bus.write err env.bus
                   -- what to return here?

因為我們在這里使用~> ,所以我們不得不保留返回類型,但是對於Left情況,我手頭沒有它!

一個人將如何應對這一要求? 重申一下-我只希望能夠在執行的操作遇到錯誤時“取消”對組件查詢的評估,但是我想保持沉默並從頭開始處理。

在特殊情況下,當前線程無法繼續執行,因此唯一要做的就是使用throwError :: forall eff a. Error -> Aff eff aAff引發異常throwError :: forall eff a. Error -> Aff eff a throwError :: forall eff a. Error -> Aff eff a

我得出的結論是,我實際上想要實現的目標是不可取的。 使組件查詢評估忽略發生錯誤的事實是沒有好處的(鑒於組件可能不希望完全處理該錯誤,但至少要對其狀態進行處理以免損壞)。

因此,我真正需要的是某種幫助程序,用於處理錯誤,並返回錯誤發生的事實的簡單指示,以便組件可以繼續進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM