2014-10-07 34 views
15

Tôi có 5 Observable s that're xích với flatMap. Trong trường hợp đầu tiên Bốn Observable s tạo ra một Exception Tôi muốn tuyên truyền một loại khác nhau của Exception đến thứ năm.quan sát RxJava chaining và xử lý lỗi (tuyên truyền ngoại lệ tùy chỉnh)

Làm thế nào là nó đạt được?

Cảm ơn.

P.S. Tôi đã đưa ra giải pháp chưa được kiểm tra này:

flatMap(
     // onNext 
     new Func1<BoolResponse, Observable<?>>() { 
      @Override 
      public Observable<?> call(BoolResponse boolResponse) { 
       return request; 
      } 
     }, 
     // onError 
     new Func1<Throwable, Observable<?>>() { 
      @Override 
      public Observable<?> call(Throwable throwable) { 
       return Observable.error(new SomethingWentWrong()); 
      } 
     }, 
     // onCompleted 
     new Func0<Observable<?>>() { 
      @Override 
      public Observable<?> call() { 
       return request; 
      } 
}); 

Bạn có nghĩ rằng không sao?

Trả lời

27

gì bạn đang tìm kiếm là onErrorResumeNext mà sẽ cho phép bạn để bắt bất kỳ Throwable phát ra từ nguồn và cho phép bạn hoặc tiếp tục với một Quan sát mới này hay cách khác Observable đó sẽ phát ra một khác nhau Throwable.

... 
    .flatMap(...) 
    .flatMap(...) 
    .onErrorResumeNext(new Func1<Throwable, Observable<?>>() { 
     @Override 
     public Observable<?> call(Throwable throwable) { 
      // Here simply return an Observable which will emit the Throwable of your liking 
      return Observable.error(new Throwable(...)); 
     } 
    }) 
    .flatMap(...); 

Hãy ghi nhớ rằng flatMap là một nhà điều hành để xử lý dòng dữ liệu của bạn nhưng nó sẽ không cho phép bạn xử lý onError có trong ví dụ mã của bạn. Bạn có thể xử lý các lỗi trong onError callback Observer của bạn, nơi bạn đăng ký vào suối.

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