rxjs observables ne se termine pas lorsqu'une erreur se produit
Quand je crée une observable à partir de zéro, et ont l'observateur d'erreur, puis les remplir, de la fait partie de l'abonnement n'est jamais invoquée.
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') }
)
La sortie est:
errored with Error: no!
Je m'attends à être:
errored with Error: no!
completed
Si je change le code pour appeler onNext au lieu de onError, observables correctement terminée:
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') }
)
- Je obtenir le résultat attendu:
succeeded with Hi!
completed
Pourquoi n'est-il pas terminée quand une erreur s'est produite?
Vous devez vous connecter pour publier un commentaire.
C'est à cause d'une erreur moyen de l'achèvement, de sorte que le rappel associé à
onCompleted
n'est jamais appelé. Vous pouvez consulter ici Rxjs contrat pour les observables (http://reactivex.io/documentation/contract.html) :Pour la gestion d'erreur, vous pouvez jeter un oeil à :
https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/errors.md
Alors que j'ai eu la même question, je suis tombé sur ce github problème.
Apparemment
finally
méthode deObservable
objet doit être utilisé dans ce cas.Citant Alexandre-Leotech à partir de ce thread: