如何过滤Bacon.js流中的错误

时间:2013-07-18 14:51:53

标签: 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() # ?    

这个想法是有问题的流带有值或错误。两者都代表领域知识;值表示系统正常运行,错误表示我们有域错误。但是,有些域错误不是我们想要携带它们的,所以我希望将它们过滤掉。

1 个答案:

答案 0 :(得分:1)

当然,替代方法也适用,您可以使用 map mapError 的组合来包装Either样式中的正常值和错误输入Haskell。例如

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

现在你的流输出如下:

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

另一方面,实际实现 filterError 并不会太难。考虑自己实施并制作PR。