2017-04-05 3 views
0

다음 목표 달성에 어려움을 겪고 있습니다. 원하는 값 또는 상태 코드가 성공을 나타내지 않았을 때 오류를 반환하는 방식으로 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 경우에 나는 손을 필요가 없습니다!

어떻게 이러한 요구 사항을 해결할 수 있습니까? 다시 말해서 - 실행 된 작업에서 오류가 발생했을 때만 내 구성 요소 쿼리의 평가를 '취소'할 수 있기를 원하지만 자동으로 수행하고 맨 위에서 처리하려고합니다.

답변

1

현재 스레드를 계속 진행할 수없는 예외적 인 경우가 있으므로 을 사용하여 Aff에 예외를 던질 수 있습니다.

0

나는 내가 성취하고자하는 것이 바람직하지 않다는 결론에 도달했습니다. 오류가 발생했다는 사실을 알지 못하는 구성 요소 쿼리 평가를 만드는 것은 아무 것도 아닙니다. (구성 요소가 오류를 완전히 처리하는 데 관심이 없을 수도 있지만, 적어도 상태가 깨진 상태가되지 않도록하려면).

따라서 실제로 필요한 것은 오류를 처리하는 일종의 도우미이며 구성 요소가이를 처리 할 수 ​​있도록 오류가 발생했다는 간단한 표시를 반환합니다.