【发布时间】:2019-03-16 08:10:17
【问题描述】:
我的问题是来自 Jeff Delaney 的示例 https://github.com/AngularFirebase/144-firestore-group-chat。
我试图理解为什么可以在没有 subscribe() 的情况下使用 observable。
例如来自 Github 存储库的 auth.service.ts:
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 };
});
})
);
})
);
}
为什么可以在没有subscribe() 的情况下使用 Observable?
【问题讨论】:
-
也许它会被传递给一些框架代码,这些代码需要一个 observable。也许模板中有一个异步管道。给你一个minimal reproducible example你的尝试来适应你的需求。
-
基本上我只是想知道在这个例子中它是如何实现的。这就是我发布 Github 存储库的原因。有一些地方在没有 subscribe() 的情况下使用 observables。我不明白为什么。
-
期望人们通读一堆甚至没有问题的代码是不合理的。另请注意,为什么与如何是不同的问题。
-
你是对的。我的错。我应该改变问题还是什么?
-
您可以edit 将其归结为您拥有的一个特定查询。
标签: angular firebase google-cloud-firestore