J'ai besoin de créer un abonnement à une Observable
qui est immédiatement éliminée lors de son premier appel.
Y a-t-il quelque chose comme:
observable.subscribeOnce(func);
Mon cas d'utilisation, je crée un abonnement dans un gestionnaire d'itinéraire express et l'abonnement est appelé plusieurs fois par demande.
Pas tout à fait certain de ce dont vous avez besoin, mais si vous voulez uniquement observer la première valeur, utilisez alors first()
ou take(1)
:
observable.first().subscribe(func);
remarque: .take(1)
et .first()
se désabonnent automatiquement lorsque leur condition est remplie.
D'après les commentaires de Coderer .
import { first } from 'rxjs/operators';
observable.pipe(
first()
)
.subscribe(func);
RxJS dispose de la meilleure documentation que j'ai jamais rencontrée. Le lien ci-dessous vous mènera à une table extrêmement utile mappant des cas d'utilisation pour les opérateurs. Par exemple, sous le cas d'utilisation "Je veux prendre la première valeur", il y a trois opérateurs: first
, firstOrDefault
et sample
.
Remarque: si une séquence observable se termine sans notification, l'opérateur first
notifie les abonnés avec une erreur tandis que l'opérateur firstOrDefault
fournit une valeur par défaut aux abonnés.
Pour compléter @ la réponse de Brandon , il est également essentiel d'utiliser first()
ou similaire pour mettre à jour une BehaviorSubject
en fonction de sa Observable
. Par exemple (non testé):
var subject = new BehaviorSubject({1:'Apple',2:'banana'});
var observable = subject.asObservable();
observable
.pipe(
first(), // <-- Ensures no stack overflow
flatMap(function(obj) {
obj[3] = 'pear';
return of(obj);
})
)
.subscribe(function(obj) {
subject.next(obj);
});