Création d'un Observable
Il est rare de devoir créer un Observable
"from scratch" car Angular fournit généralement des "wrappers" à base d'Observable
s pour la plupart des sources de données asynchrones (http, forms, route changes etc...) mais il est intéressant de s'y aventurer au moins une fois pour mieux en comprendre le fonctionnement.
Observer
Observer
L'exemple suivant :
... produit le résultat :
En omettant l'appel à la méthode complete
, nous produisons un Observable
infini et risquons des fuites mémoire si l'on oublie d'unsubscribe
.
Erreur
La méthode error
permet de déclencher une erreur.
"Teardown logic"
Voici un exemple d'implémentation de la fonction RxJS interval
utilisée précédemment.
Cela produit le résultat suivant :
5 secondes après la "subscription", la "callback" next
ne reçoit plus de valeurs. Par contre, NodeJS ne rend pas la main car le setInterval
continue à tourner (et émettre des valeurs ignorées) en tâche de fond malgré l'appel à unsubscribe
. Il s'agit d'une fuite.
Pour remédier à ce problème, il faudrait appeler la fonction clearInterval
dès que :
une erreur est détectée,
la méthode
complete
est appelée,le consommateur de l'
Observable
appelle la méthodeunsubscribe
.
Il faut donc implémenter une sorte de destructeur d'Observable
.
Ce destructeur est appelé "Teardown Logic" et doit être retourné par la fonction de subscribe
passé en paramètre au constructeur de l'Observable
.
Le problème est ainsi résolu car clearInterval
sera appelé peu importe l'origine de l'interruption : unsubscribe
, error
ou complete
.
Dernière mise à jour