我很努力實現以下目標:我的API請求的輸入方式是返回一個期望的值,或者當狀態碼未指示成功時返回錯誤,或者身份驗證令牌已無效等:Either String r
。throwError在鹵素組件查詢中
現在,我不想關心它,當我的組件查詢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
情況下,我沒有它在眼前!
如何解決此類需求?重申 - 我只希望能夠在執行的操作遇到錯誤時'取消'對組件查詢的評估,但我想靜靜地執行並從頂部處理它。