2

有时我想过滤掉流中的某些错误。我想写这样的东西:

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

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

4

1 回答 1

1

当然,替代方法有效,您可以使用mapmapError的组合以 Haskell 中的Either类型样式包装正常值和错误。例如

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

现在您的流将输出如下内容:

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

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

于 2013-08-15T19:41:25.300 回答