Tengo un servicio con un asunto:
@Injectable() export class UserService() { private currentUserSubject = new BehaviorSubject<User>(null); public currentUser = this.currentUserSubject.asObservable().distinctUntilChanged(); ... // emitting new User }Tengo un componente en el que inyecto este servicio y me suscribo a las actualizaciones:
@Component() export class UserComponent { constructor(private userService: UserService) { this.userService.currentUser .subscribe((user) => { // I want to see not null value here }) } } Quiero aplicar algo a Observable<User> para filtrar todos los valores nulos y suscribirme solo cuando User esté realmente cargado.
Agregue un operador de filtro a su cadena observable. Puede filtrar nulos explícitamente o simplemente verificar que su usuario sea veraz: tendrá que hacer esa llamada según sus necesidades.
Filtrar solo usuarios nulos:
public currentUser = this.currentUserSubject .asObservable() .filter(user => user !== null) .distinctUntilChanged();Existe otra forma de verificar el valor:
public currentUser = this.currentUserSubject .asObservable() .filter<User>(Boolean) .distinctUntilChanged();con rxjs@6 y mecanografiado, la forma recomendada (legible/mantenible) es definir el siguiente tipo de protección:
export function isNonNull<T>(value: T): value is NonNullable<T> { return value != null; } y aumentar un sujeto con pipe y filter :
subject.pipe(filter(isNonNull))