卤素组件查询中的 throwError
throwError in Halogen component queries
我正在努力实现以下目标:我输入的 API 请求的方式 return 要么是期望的值,要么是状态代码未指示时的错误成功,或身份验证令牌无效时等: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?
因为我们在这里使用~>
,所以我们不得不保留return类型,但是对于Left
的情况我手边没有!
如何应对这样的要求?重申一下 - 我只希望能够 'cancel' 在执行的操作遇到错误时评估我的组件查询,但我想静默地执行并从顶部处理它。
您遇到当前线程无法继续的异常情况,因此唯一要做的就是使用 throwError :: forall eff a. Error -> Aff eff a
.
在 Aff
中抛出异常
我得出的结论是,我想要达到的结果实际上并不理想。让组件查询评估忽略错误发生的事实并不是什么好事(鉴于组件可能对完全处理错误不感兴趣,但至少对其状态做一些事情不会最终被破坏)。
因此,我真正需要的是处理错误的某种帮助程序,以及 return 错误发生事实的简单指示,以便该组件可以继续处理错误。
我正在努力实现以下目标:我输入的 API 请求的方式 return 要么是期望的值,要么是状态代码未指示时的错误成功,或身份验证令牌无效时等: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?
因为我们在这里使用~>
,所以我们不得不保留return类型,但是对于Left
的情况我手边没有!
如何应对这样的要求?重申一下 - 我只希望能够 'cancel' 在执行的操作遇到错误时评估我的组件查询,但我想静默地执行并从顶部处理它。
您遇到当前线程无法继续的异常情况,因此唯一要做的就是使用 throwError :: forall eff a. Error -> Aff eff a
.
Aff
中抛出异常
我得出的结论是,我想要达到的结果实际上并不理想。让组件查询评估忽略错误发生的事实并不是什么好事(鉴于组件可能对完全处理错误不感兴趣,但至少对其状态做一些事情不会最终被破坏)。
因此,我真正需要的是处理错误的某种帮助程序,以及 return 错误发生事实的简单指示,以便该组件可以继续处理错误。