Po utworzeniu obserwowalnego od zera i po wystąpieniu błędu obserwatora, zakończona część subskrypcji nigdy nie zostanie wywołana.Obserwowane obiekty rxjs nie kończą się po wystąpieniu błędu.
var observer = Rx.Observable.create(function(observer){
observer.onError(new Error('no!'));
observer.onCompleted();
})
observer.subscribe(
function(x) { console.log('succeeded with ' + x) },
function(x) { console.log('errored with ' + x) },
function() { console.log('completed') }
)
Wyjście jest:
errored with Error: no!
będę oczekiwać, że będzie:
errored with Error: no!
completed
Gdybym zmienić kod powołać onNext zamiast onError, obserwowalny prawidłowo ukończył:
var observer = Rx.Observable.create(function(observer){
observer.onNext('Hi!');
observer.onCompleted();
})
observer.subscribe(
function(x) { console.log('succeeded with ' + x) },
function(x) { console.log('errored with ' + x) },
function() { console.log('completed') }
)
Dostaję oczekiwana moc wyjściowa:
succeeded with Hi!
completed
Dlaczego nie jest kompletny, gdy wystąpił błąd?
Dzięki! Widzę to wyjaśnienie: OnError wskazuje, że obserwowalne zostało zakończone z określonym błędem i że nie będzie emitować dalszych elementów –