2016-06-22 27 views
6

Không rõ cách truyền bá lỗi cho người đăng ký trong REactiveX sao cho Đài quan sát không bị phá hủy.ReactiveX: Lỗi xử lý không phá hủy quan sát

Ví dụ

observable.onNext(1); 
observable.onNext(2); 
observable.onError("Nope"); 
observable.onNext(3);<<won't work. 

Tôi chấp nhận hạn chế này vì nó là, tuy nhiên tôi vẫn còn có kịch bản mà tôi muốn nghe hạ biết một lỗi xảy ra VÀ Tôi không muốn quan sát để chết.

Trường hợp sử dụng chính là mã giao diện người dùng, nếu có lỗi xảy ra, tôi không muốn phải gọi "Thiết lập" đối với tất cả các quan sát được đăng ký trước đó.

lựa chọn thay thế có thể là

a) đẩy một đối tượng tùy chỉnh mà có một trường dữ liệu và một trường lỗi

class Data 
{ 
    int value; 
    Error * error; 
} 

Tôi không thích giải pháp này

b) Có hai dòng. Một cho dữ liệu và một cho lỗi.

observable.onNext(1); 
observable.onNext(2); 
errorObservable.onNext("Error"); 
observable.onNext(3); 

Thực tiễn phổ biến nhất cho điều này là gì?

Trả lời

1

Tôi chắc chắn sẽ đi với tùy chọn A) - tạo một đối tượng có thể mang cả dữ liệu và/hoặc lỗi. Tôi không quan trọng bạn sẽ bao bọc dữ liệu và lỗi có thể vào đối tượng đó nhưng gửi cả hai thông qua một luồng như sự kiện onNext() là giải pháp phù hợp để cung cấp cho người đăng ký tất cả thông tin và mọi quyền tự do để xử lý điều đó.

Tùy chọn B) có thể khá khó khăn để triển khai trong các tình huống không đồng bộ phức tạp hơn và có thể dẫn đến sử dụng rất nhiều Subject s cũng không tốt.

0

Nếu bạn chỉ thêm retry() vào nguồn có thể quan sát được, người đăng ký không cần phải đăng ký lại.

Các vấn đề liên quan