我正在使用 angular fire 根據登錄的用戶讀取 firestore 上的資料。我檢查用戶物件是否已回傳,并基于此我有一個命令來監聽檔案更改。
async getUsersCards() {
let _user: UserModel = await this.authService.GetUser();
if (_user) {
return this.angularFirestore
.collection<Card>('cards', (ref) =>
ref.where('owner', '==', _user?.uid)
)
.valueChanges();
} else {
}
}
因為我對用戶進行了 If 檢查,所以函式的簽名是 Promise<Observable<board[]> | undefined> 如何消除對 undefined 的需求(我在 else 塊中做什么)?
uj5u.com熱心網友回復:
我認為您可以簡化代碼以回傳 theObservable<Board[]>而無需回傳 a Promise,如下所示:
// import { from, Observable } from 'rxjs';
// import { filter, mergeMap } from 'rxjs/operators';
getUsersCards(): Observable<Board[]> {
// If `this.authService.GetUser()` returns an Observable, then you can use it directly without `from` function.
// The `from` function is used to create an Observable from a Promise.
return from(this.authService.GetUser()).pipe(
filter((user) => !!user),
mergeMap((user) =>
this.angularFirestore
.collection<Card>('cards', (ref) =>
ref.where('owner', '==', user?.uid)
)
.valueChanges()
)
);
}
然后,在您的組件/服務中,您可以像下面這樣使用它:
getUsersCards().subscribe((res: Board[]) => console.log(res));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/436039.html
上一篇:具有嚴格型別檢查的Angular全域trackBy屬性指令
下一篇:從資料庫角度回傳單個用戶屬性
