Tôi có một vấn đề hành viLàm thế nào để xử lý các ngoại lệ về một chủ đề hành vi
var source = new BehaviorSubject<int>(0);
sau đó tôi quá trình đó nguồn với một cái gì đó giống như
var withErrors = source
.Select(v =>
{
if (v == 2)
{
throw new Exception("Ouch ");
}
return v;
})
Tôi muốn đăng ký vào withErrors theo cách như vậy mà tôi có thể bỏ qua các lỗi . Một nỗ lực bắt được như thế này.
public IObservabe<int> SkipError(IObservable<T> source){
return source
.Catch(e=>SkipErrors(source.Skip(1));
}
và sau đó gọi nó như vậy
var withoutErrors = SkipError(withErrors);
các Skip là một nỗ lực để tránh lặp lại những lỗi cuối cùng về vấn đề hành vi nhưng than ôi nó không hoạt động theo cách đó. Bỏ qua không bỏ qua các lỗi nhưng chỉ trên dữ liệu hợp lệ để lỗi từ trạng thái hiện tại trong chủ đề hành vi tiếp tục.
Có cách thông minh bằng văn bản Bỏ qua cũng sẽ bỏ qua các lỗi. Một cái gì đó nói với tôi điều này là không thể nhưng hy vọng tôi là sai
Thực ra tôi đã đi đến kết luận rằng điều này là không thể đạt được. Theo thông số RX, một Observable không thể tiếp tục sau khi gọi OnError, bạn không thể làm gì để nhận giá trị tiếp theo sau khi OnError được gọi. Tôi sẽ cần phải chèn một số logic đến nơi trước khi lỗi được tạo ra. – bradgonesurfing
Chính xác. Câu hỏi của bạn là xung đột trực tiếp với thông số Rx. Lưu ý ở đây nó không phải là BehaviorSubject mà lỗi, nhưng chiếu (Chọn nhà điều hành), không phải là rất có liên quan. –
Tôi đã nhận ra rằng nếu tôi muốn truyền bá lỗi như thế này, tôi cần IObservable> trong đó Đặc biệt được định nghĩa như https://gist.github.com/bradphelan/6154972 và về cơ bản là một vùng chứa có thể chứa Ngoại lệ hoặc Giá trị –
bradgonesurfing