2017-02-15 31 views
8

Tôi đang cố gắng để ném ra một lỗi bên trong một rxjs Quan sátlỗi ném bên rxjs Quan sát

new Observable(subscriber => { 
    Observable.throw("error1"); 
    return Observable.throw("error2"); 
}) 
.subscribe(
    () => {}, 
    err => console.error(err) 
); 

lỗi 1 không bắt.

error2 đưa ra một lỗi biên dịch:

Argument of type '(this: Observable<{}>, subscriber: Subscriber<{}>) => ErrorObservable<string>' is not assignable to parameter of type '(this: Observable<{}>, subscriber: Subscriber<{}>) => TeardownLogic'. Type 'ErrorObservable<string>' is not assignable to type 'TeardownLogic' 

cách thích hợp để ném ra một lỗi bên trong một quan sát được là bao nhiêu?

+0

thử ném một lỗi như 'Observable.throw (Lỗi mới ("error1"))'. –

+0

@JyothiBabuAraja không hoạt động. Nó không bị bắt bởi đăng ký() – phzonta

Trả lời

8

Sử dụng Subscriber.error:

new Rx.Observable(subscriber => { 
 
    subscriber.error("error1"); 
 
    subscriber.error("error2"); // not called because a stream will be finalized after any error 
 
}) 
 
.subscribe(
 
() => {}, 
 
    err => console.error(err) 
 
);
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

1

Với một quan sát mà bạn đã tạo cho mình, bạn phải truy cập vào các phương pháp observer.error().

const obs = Observable.create(observer => { 

    // Emit a value. 
    observer.next("hello"); 

    // Throw an error. 
    observer.error("my error"); 

}); 

Lưu ý: nếu bạn đang sử dụng RxJS 4, bạn sẽ phải sử dụng onNext()onError() để thay thế.

3

Khi sử dụng new Observable() hoặc Observable.create() bạn có thể đẩy các lỗi trực tiếp đến thuê bao (quan sát viên):

Observable.create(subscriber => { 
    subscriber.error(new Error("error1")); 
}) 
.subscribe(
    () => {}, 
    err => console.log(err.message) 
); 

Các chức năng ẩn danh thông qua với new Observable() tùy chọn có thể trở lại một callback hủy đăng ký. Đó là lý do tại sao nó cho bạn lỗi bởi vì bạn đang trả về một Observable.

Sử dụng Observable.throw("error1") thường không cần thiết. Đây chỉ là một quan sát mà chỉ phát ra một lỗi và không có gì hơn. Bạn có thể sử dụng nó ví dụ như sau:

Observable.create(subscriber => { 
    subscriber.next('whatever'); 
    }) 
    .merge(Observable.throw(new Error("error2"))) 
    .subscribe(
    () => {}, 
    err => console.log(err.message) 
); 

Xem bản demo trực tiếp: https://jsbin.com/fivudu/edit?js,console

+0

vì vậy các lỗi được ném vào bên trong một nhà sản xuất 'ném lỗi mới()' có hiệu quả bị bỏ qua và không được báo cáo? –

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