RxJS beobachtbar ist nicht abgeschlossen, wenn ein Fehler Auftritt
Wenn ich eine beobachtbare, von Grund auf, und haben die Beobachter-Fehler, dann komplett fertig Teil der Abonnement-nie aufgerufen.
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') }
)
Ausgabe:
errored with Error: no!
Ich würde erwarten, dass es:
errored with Error: no!
completed
Wenn ich den code zum aufrufen von onNext statt onError, die beobachtbaren ordnungsgemäß abgeschlossen:
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') }
)
Ich bekomme die erwartete Ausgabe:
succeeded with Hi!
completed
Warum wird es nicht beendet, wenn ein Fehler aufgetreten ist?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass da ein Fehler bedeutet, Fertigstellung, so dass die callback zugeordnet
onCompleted
nie aufgerufen wird. Sie können hier eine Bewertung Rxjs Vertrag für observablen (http://reactivex.io/documentation/contract.html) :Für Fehler-management, können Sie einen Blick auf :
https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/errors.md
Während ich hatte die gleiche Frage, stieß ich auf diese github issue.
Offenbar
finally
Methode derObservable
Objekt muss in diesem Fall verwendet werden.Zitiere aus dem Aleksandr-Leotech von diesem thread:
Andere und wahrscheinlich die einfachste Lösung sein könnte, mit
add()
Funktion.In diesem Fall wird die Anweisung immer ausgeführt wird, unabhängig Fehler aufgetreten
oder rufen Sie es (gleich
finally
in den meisten Programmiersprachen).