2015-07-29 1 views

Répondre

3

Il existe plusieurs façons d'y parvenir:

  1. L'opérateur subscribeOnCompleted() au lieu de passer des valeurs vides à la méthode .subscribe.

  2. Utilisez tapOnCompleted(), comme ci-dessus, mais il ne démarrera pas la séquence et vous pourrez l'injecter en cours de séquence.

  3. Utilisez le .finally() qui sera exécuté lorsque la séquence se termine (normalement ou autrement). Dans votre exemple, vous montrez un effet secondaire mais si vous faisiez du nettoyage de ressources, il serait plus sémantique d'utiliser .using() qui prend un jetable et le lie à la durée de vie de l'abonnement.

Pour ceux-ci ressemblent:

  1. source.subscribeOnCompleted(() => socket.send({type: 'end'}));

  2. source.tapOnCompleted(() => socket.send({type: 'end'})).subscribe()

  3. source.finally(() => socket.send({type: 'end'})).subscribe()

  4. Rx.Observable.using(() => createResource(), (resource) => source).subscribe()

+0

Je suppose que dans mon cas 'tapOnCompleted' est la meilleure approche – kharandziuk