rxjs - que - Crea una suscripción única
rxjs angular (3)
Necesito crear una suscripción a un
Observable
que se
Observable
inmediato cuando se llame por primera vez.
¿Hay algo como:
observable.subscribeOnce(func);
Mi caso de uso, estoy creando una suscripción en un controlador de ruta rápida y la suscripción se llama varias veces por solicitud.
No estoy 100% seguro de lo que necesita, pero si solo desea observar el primer valor, use
first()
o
take(1)
:
observable.first().subscribe(func);
nota:
.take(1)
y
.take(1)
automáticamente cuando se cumple su condición
Actualización de RxJS 5.5+
Del comentario de Coderer .
import { first } from ''rxjs/operators''
observable
.pipe(first())
.subscribe(func);
Para complementar
la respuesta de @ Brandon
, usar
first()
o similar también es esencial para actualizar un
BehaviorSubject
basado en su
Observable
.
Por ejemplo (no probado):
var subject = new BehaviorSubject({1:''apple'',2:''banana''});
var observable = subject.asObservable();
observable
.pipe(
first(), // <-- Ensures no
flatMap(function(obj) {
obj[3] = ''pear'';
return of(obj);
})
)
.subscribe(function(obj) {
subject.next(obj);
});
RxJS tiene la mejor documentación que he encontrado.
Seguir el siguiente enlace lo llevará a casos de uso de mapeo de tablas extremadamente útiles para los operadores.
Por ejemplo, bajo el caso de uso "Quiero tomar el primer valor" hay tres operadores:
first
,
first
o
firstOrDefault
y
sample
.
Tenga en cuenta que si una secuencia observable se completa sin notificaciones, entonces el
first
operador notifica a los suscriptores con un error, mientras que el operador
firstOrDefault
proporciona un valor predeterminado a los suscriptores.