2013-07-18 27 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

替代的作品,當然,你可以使用的地圖mapError組合包裝在哈斯克爾Either類型的風格正常值和錯誤。例如

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

現在你流將輸出這樣的事情:

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

在另一方面,實際執行filterError不會太辛苦。考慮自己實施這個並且做一個PR。

+0

你的意思是實現'filterError',對吧? – wolverian

+0

將一個'filterError'過濾掉錯誤,'mapError'將錯誤映射爲值可能會令人困惑。 'mapError :: Error - > Error'對我來說更加正確。 – wolverian

+0

我按照您的建議將其更正爲「filterError」。 mapError原來就是爲了一個目的而添加的,我認爲它很好用,即使您最初可能會感到困惑。你建議的替代方案的目的是什麼? – raimohanska