2017-06-05 29 views
0

reference guide的錯誤處理部分,我閱讀並理解下面的註釋,即使錯誤將通過錯誤處理運營商處理,原始序列終止。有沒有辦法處理錯誤,例如流中的錯誤被替換爲一個值,並且原始序列繼續? 「在您瞭解錯誤處理操作符之前,您必須記住,反應序列中的任何錯誤都是終止事件,即使使用了錯誤處理操作符,它也不允許原始序列繼續,而是將onError信號轉換爲新序列的開始(後退一個),因此它將上游序列替換掉。「有沒有辦法處理錯誤,使原始序列不會終止?

我可以看到哪裏有隻有流一些壞分子情況(包括我的使用情況),並且我們不想終止,因爲整個流。

例如,在下面的代碼,假定n = 2是不好的情況下,我只想優雅地處理它,而不是終止該流。可能是我在這裏錯過了一些基本的東西。

Flux.interval(Duration.ofSeconds(2)) 
     .map(n -> {if (n ==2) throw new IllegalArgumentException(); else {return "Successful-n";}}) 
     .onErrorReturn("Errored") 
     .doOnNext(n -> log("Processed " + n)) 
     .blockLast(); 

回答

1

如果您只是想重新訂閱observable,則可以使用retry()運算符。當檢測到錯誤時,它將重新訂閱觀察值。有些變化需要重試計數,或者會根據Throwable提供不同的響應。

編輯:觀測量是定義發生錯誤時終止。所以,在你的榜樣,你可能要包裝你的錯誤在一個容器中,這樣你可以隨身攜帶,當被識別的錯誤上,而不是在這一點上拋出一個錯誤。

+0

感謝鮑勃。雖然這可能爲我提供可行的追索權,但我所追求的是一種不必訂閱新的序列的方法。我只是想要偶爾發生一些錯誤,並繼續原始序列。 – Gaurav

相關問題