有没有办法处理错误,原始序列不会终止?

时间:2017-06-05 21:57:44

标签: java reactive-programming project-reactor

reference guide的错误处理部分,我阅读并理解以下注释,即使错误是通过错误处理操作符处理的,原始序列也会终止。有没有办法处理错误,如流中的错误被值替换,原始序列继续?

"在您了解错误处理操作符之前,您必须记住,反应序列中的任何错误都是终端事件。即使使用了错误处理运算符,它也不允许原始序列继续,而是将onError信号转换为新序列的开头(回退序列)。因此,它取代了上游终止的序列。"

我可以看到流中只有一些坏元素的情况(包括我的用例),我们不希望因此而终止整个流。

例如在下面的代码中,假设n = 2是一个坏的情况,我只是想要优雅地处理它而不是终止流。可能是我在这里缺少一些基本的东西。

In [55]: import numpy as np               

In [56]: import pandas as pd              

In [57]: s = pd.Series(np.random.randn(5))

In [58]: s
Out[58]: 
0    0.152037
1    0.194204
2    0.296090
3    1.071013
4   -0.324589
dtype: float64

In [59]: s.nsmallest(3) ## s.drop_duplicates().nsmallest(3); if duplicates exists               
Out[59]: 
4   -0.324589
0    0.152037
1    0.194204
dtype: float64

In [60]: s.nlargest(3) ## s.drop_duplicates().nlargest(3); if duplicates exists             
Out[60]: 
3    1.071013
2    0.296090
1    0.194204
dtype: float64

1 个答案:

答案 0 :(得分:1)

如果您只想重新订阅observable,可以使用retry()运算符。当检测到错误时,它将重新订阅observable。有些变体需要重试计数,或根据Throwable提供不同的响应。

编辑:Observables 已定义以在发生错误时终止。因此,在您的示例中,您可能必须将错误包装在容器中,以便在识别错误​​时继续执行,而不是在此时抛出错误。