我检查数据库是否有参考(存在),但没有任何回聊,但看不到哪里。
chat.service.ts:
getUserChats(): Observable<Chat[]> {
let uid = '-1';
this.auth.currUser.subscribe(user => (uid = user.uid));
this.chats = this.afs
.collection('chats', ref => ref.where('members', 'array-contains', `users/${uid}`))
.snapshotChanges()
.pipe(
map(actions => {
return actions.map(action => {
const data = action.payload.doc.data() as Chat;
const id = action.payload.doc.id;
return {id, ...data};
});
})
) as Observable<Chat[]>;
return this.chats;
}
该代码旨在获取所有登录用户所在的聊天室。我通过检查members数组(如果有对他的引用)来进行此操作。
chat.component.ts:
chats: Observable<Chat[]>;
constructor(private router: Router, public chatService: ChatService, public dialog: MatDialog, public auth: AuthService) { }
ngOnInit() {
this.chats = this.chatService.getUserChats();
}
chat.component.html:
<mat-list-option *ngFor="let chat of chats | async" (click)="handleClick(chatList)" [value]="chat.id">
<img matListAvatar src="./assets/avatar.svg" alt="Avatar Icon">
<h3 mat-line>{{chat.name}}</h3>
<p mat-line>test</p>
</mat-list-option>
聊天结构:
答案 0 :(得分:1)
显然,您正在查询存储在数据库中的users/uid
,/users/uid
,请参阅第一个/
答案 1 :(得分:0)
我认为您是在服务器从Observable复出之前从服务返回“ this.chat”的。 您需要返回可观察者自己。 尝试此更改:
getUserChats(): Observable < Chat[] > {
let uid = '-1';
this.auth.currUser.subscribe(user => (
uid = user.uid;
//that what you need to return
return this.afs
.collection('chats', ref => ref.where('members', 'array-
contains ', `users/${uid}`))
.snapshotChanges()
.pipe(
map(actions => {
return actions.map(action => {
const data = action.payload.doc.data() as Chat;
const id = action.payload.doc.id;
return { id,...data };
});
})
) as Observable < Chat[] > ;
}
));
每个Observable都需要订阅-但在角度上异步管道可以满足您的需求-因此您只需将其传递给Observable。
我编辑我的答案-现在查询等待用户auth的答案
答案 2 :(得分:0)
将立即搜索值-1,因为我没有等待用户可观察到的对象完成,这就是为什么它搜索-1却什么都没找到的原因,所以我必须等待用户可观察到的对象。仍然不知道该如何返回内部的可观察对象。