2013-07-18 3 views
2

때때로 스트림의 특정 오류를 필터링하려고합니다. 다음과 같이 쓰고 싶습니다.Bacon.js 스트림의 오류를 필터링하는 방법

stream 
    .filterError (error) -> 
    error.type is 'foo' 

그러나 filterError 메서드는 없습니다.

대안으로 나는 errors().mapError을 사용하여 오류를 값으로 매핑하고 필터링 한 다음 오류로 다시 매핑 할 수 있다고 생각했습니다. 그러나 스트림의 값을 오류로 변환하는 방법은 없습니다.

# Filter only the errors we are interested in 
errors = stream.errors() 
    .mapError (error) -> 
    error 
    .filter (error) -> 
    ... 
    .mapValuesBackIntoErrors() # ?  

아이디어는 해당 스트림이 값 또는 오류를 전달한다는 것입니다. 둘 다 도메인 지식을 나타냅니다. 값은 시스템이 정상 작동 중이며 오류는 도메인 오류가 있음을 의미합니다. 도메인 오류 중 일부는 우리가 그들을 옮기고 싶어하는 것이 아니기 때문에, 나는 그것들을 걸러 내고 싶다.

+0

이 답변으로 생각하십니까? 아래는 이상하게 보입니다. 나는 네가 어디에서 왔는지 완전히 볼 수있다. –

답변

1

대안 작품은 물론, 당신은 하스켈에서 Either 유형의 스타일에 정상 값과 오류를 포장 지도mapError의 조합을 사용할 수 있습니다.

stream.map((value) -> { value }).mapError((error) -> { error }) 

예를

지금 스트림은 다음과 같은 결과물을 출력 할 것 같습니다 실제로 너무 어렵지 않을 것 filterError을 한편

{ value: 1 } 
{ value: 2 } 
{ error: "cannot connect to host" } 

구현. 자신을 구현하고 홍보하는 것을 고려하십시오.

+0

당신은'filterError' 구현을 의미 했습니까? – wolverian

+0

오류를 걸러내는'filterError'와 오류를 값으로 매핑하는'mapError'를 혼동시키는 것은 혼란 스러울 것입니다. 'mapError :: Error -> Error'는 나에게 더 정확하다고 느낍니다. – wolverian

+0

제안한대로 "filterError"로 수정했습니다. 있는 그대로의 mapError는 목적에 맞게 추가되었으며 처음에는 혼동 스러울지라도 잘 처리했다고 생각합니다. 당신이 추천 한 대안의 목적은 무엇입니까? – raimohanska