有时我想过滤流中的某些错误。我想写这样的东西:
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)
当然,替代方法也适用,您可以使用 map 和 mapError 的组合来包装Either样式中的正常值和错误输入Haskell。例如
stream.map((value) -> { value }).mapError((error) -> { error })
现在你的流输出如下:
{ value: 1 }
{ value: 2 }
{ error: "cannot connect to host" }
另一方面,实际实现 filterError 并不会太难。考虑自己实施并制作PR。