मैं इन इकाई परीक्षण किए गए, और परिणाम नहीं है कि मैं क्या सब से अधिक अपेक्षित:RxJava doOnError और ऑनररेटर्न कैसे काम करता है?
// This one outputs "subscribe.onError"
@Test
public void observable_doOnError_subscribingToError() throws InterruptedException {
Observable<String> obs = getErrorProducingObservable();
obs.doOnError(throwable -> System.out.println("doOnError"));
obs.subscribeOn(Schedulers.immediate()).observeOn(Schedulers.immediate()).subscribe(
s -> {},
error -> System.out.println("subscribe.onError")
);
Thread.sleep(300);
}
// This one outputs "subscribe.onError"
@Test
public void observable_onErrorReturn() throws InterruptedException {
Observable<String> obs = getErrorProducingObservable();
obs.onErrorReturn(throwable -> "Yeah I got this");
obs.subscribeOn(Schedulers.immediate()).observeOn(Schedulers.immediate()).subscribe(
s -> System.out.println("got: " + s),
error -> System.out.println("subscribe.onError")
);
Thread.sleep(300);
}
private Observable<String> getErrorProducingObservable() {
return Observable.create(subscriber -> {
subscriber.onError(new RuntimeException("Somebody set up us the bomb"));
});
}
तो दोनों उत्पादन "subscribe.onError" - न doOnError
है और न ही onErrorReturn
कहा जा रहा है।
स्रोत प्रत्यक्ष संशोधित इतना है कि यह एक कार्रवाई का आह्वान करता है, तो यह onError कॉल: के रूप में
doOnError
प्रलेखित है।
मुझे यकीन है कि को समझ करने के लिए कैसे नहीं हूँ, लेकिन मैं उत्पादन या "doOnError" "subscribe.onError" के बाद होने की उम्मीद या तो "doOnError"।
एक नमूदार एक आइटम (एक निर्दिष्ट समारोह से लौट आए) के बजाय onError लागू करता है, तो यह एक त्रुटि का सामना करना पड़ता से फेंकना निर्देश देता है: के रूप में
onErrorReturn
प्रलेखित है।
इसलिए मुझे उम्मीद थी कि "मिला: हाँ मुझे यह मिला" बाद के परीक्षण से आउटपुट के रूप में।
क्या देता है?
आह धन्यवाद। अब यह उम्मीद के अनुसार काम करता है, और मैंने सीखा है कि 'doOnError' ग्राहकों के व्यवहार को नहीं बदलेगा - आप बस एक दूसरा त्रुटि श्रोता जोड़ें। – Nilzor