Моя проблема в этом примере https://github.com/AngularFirebase/144-firestore-group-chat от Джеффа Делани.
Я пытаюсь понять, почему можно использовать наблюдаемое без subscribe()
.
Например, auth.service.ts из репозитория Github:
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { auth } from 'firebase/app';
import { AngularFireAuth } from '@angular/fire/auth';
import {
AngularFirestore,
AngularFirestoreDocument
} from '@angular/fire/firestore';
import { Observable, of } from 'rxjs';
import { switchMap, first, map } from 'rxjs/operators';
@Injectable({ providedIn: 'root' })
export class AuthService {
user$: Observable<any>;
constructor(
private afAuth: AngularFireAuth,
private afs: AngularFirestore,
private router: Router
) {
this.user$ = this.afAuth.authState.pipe(
switchMap(user => {
if (user) {
return this.afs.doc<any>(`users/${user.uid}`).valueChanges();
} else {
return of(null);
}
})
);
}
Нет ни subscribe()
ни в конструкторе, ни в остальной части проекта, но пример работает нормально.
Другой пример в chat.service.ts эта функция:
getUserChats() {
return this.auth.user$.pipe(
switchMap(user => {
return this.afs
.collection('chats', ref => ref.where('uid', '==', user.uid))
.snapshotChanges()
.pipe(
map(actions => {
return actions.map(a => {
const data: Object = a.payload.doc.data();
const id = a.payload.doc.id;
return { id, ...data };
});
})
);
})
);
}
Почему можно использовать Observable без subscribe()
?