Selon cet article , la fonction onComplete
et onError
de l’ subscribe
s’excluent mutuellement.
onError
onComplete
événements onError
ou onComplete
se déclencheront dans mon subscribe
.
J’ai un bloc logique qui doit être exécuté, que je reçoive une erreur ou que je finisse avec succès mes informations.
J’ai recherché quelque chose comme finally
en python , mais tout ce que j’ai trouvé est finally
ce qui doit être attaché à l’observable que je crée.
Mais je veux faire cette logique seulement lorsque je suis abonné, et après la fin du stream, avec ou sans erreur.
Des idées?
Mise à jour pour RxJS 6 : depuis RxJS 6, cet opérateur a été renommé pour finalize()
.
Je pense finally()
que l’opérateur finally()
est correct. Vous dites:
faire cette logique que lorsque je suis abonné, et après la fin du stream
ce qui n’est pas un problème je pense. Vous pouvez avoir une seule source
et utiliser finally()
avant de vous y abonner si vous le souhaitez. De cette façon, vous n’êtes pas obligé de toujours utiliser finally()
:
let source = Observable.create(observer => { observer.next(1); observer.error('error message'); observer.next(3); observer.complete(); }).publish(); source .finally(() => console.log('Finally callback')) .subscribe( value => console.log('#1 Next:', value), error => console.log('#1 Error:', error), () => console.log('#1 Complete') ); source .subscribe( value => console.log('#2 Next:', value), error => console.log('#2 Error:', error), () => console.log('#2 Complete') ); source.connect();
Cela imprime à la console:
#1 Next: 1 #2 Next: 1 #1 Error: error message Finally callback #2 Error: error message