Tôi đang sử dụng RxJava và ứng dụng Android với RxAndroid. Tôi đang sử dụng mergeDelayError để kết hợp hai cuộc gọi mạng phù hợp với retro thành một trong những quan sát có thể xử lý các mục được phát ra nếu phát ra một và lỗi nếu có. Điều này không hoạt động và nó chỉ kích hoạt hành vi onError khi gặp phải lỗi. Bây giờ để kiểm tra điều này, tôi đã chuyển sang một ví dụ rất đơn giản và vẫn là successAction không bao giờ được gọi khi tôi có một cuộc gọi onError. Xem ví dụ bên dưới.Rx Java mergeDelayError không hoạt động như mong đợi
Observable.mergeDelayError(
Observable.error(new RuntimeException()),
Observable.just("Hello")
)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.finallyDo(completeAction)
.subscribe(successAction, errorAction);
Hành động thành công sẽ chỉ được gọi nếu tôi sử dụng hai lần quan sát thành công. Tôi có thiếu một cái gì đó với cách mergeDelayError có nghĩa vụ phải làm việc?
EDIT:
tôi đã tìm thấy rằng nếu tôi loại bỏ các observeOn
và subscribeOn
mọi thứ hoạt động như mong đợi. Tôi cần phải xác định chủ đề và nghĩ rằng đó là toàn bộ điểm của việc sử dụng Rx. Bất kỳ ý tưởng tại sao chỉ định những Schedulers
sẽ phá vỡ hành vi?
doc nói 'một thông báo onError từ bất kỳ nguồn Observables sẽ (...) chấm dứt các Observable.' có vẻ rõ ràng từ biểu đồ rằng bất kỳ lỗi bị trì hoãn cho đến khi sau khi tất cả những người khác được hoàn thành, và sau đó bị sa thải, chấm dứt quan sát được mà không được hoàn thành. – njzk2
vì vậy bạn thực sự sẽ nhận được 'successAction' một lần, sau đó là hành động lỗi. (nhưng không hoàn thành) – njzk2
làm thế nào để bạn khẳng định rằng thành công không được gọi? – njzk2