我正在使用 rxjs 觀測器從資料庫中獲取資料,然后我有一個存盤庫,它應該管一個觀測器,以便我可以將資料映射到模型 Leaderboad。當我這樣做的時候,我發現當我在控制臺記錄時,我得到的陣列有值。但當我試圖獲取長度或做foreach時,它似乎沒有條目。
export class LeaderboardRepository {
provider: LeaderboardProvider;
constructor(provider: LeaderboardProvider) {
this.provider = provider;
}
public observeLeaderboardSortedByScore(limit: number, startAt? : any): Observable<Leaderboard[]> {
return this.provider。 observeLeaderboardSortedByScore(limit, startAt).pipe(
map((list:Map<string, any> []) => {
console.log(list)。
//outputs.
// leaderboard-repository.ts:18
// []
// 0: Map(6) {'username' => 'TestLorenzofefe', 'characterUsed' => 2, 'submittedAt' => t, 'userId' => 'iukQSLQOvqYcRx85rBAoz3BfDM13', 'score' => 54, ... }
// 1: Map(6) {'score' => 44, 'submittedAt' => t, 'characterUsed' => 2, 'userId' => 'iukQSLQOvqYcRx85rBAoz3BfDM13', 'username' => 'testName', ... }
// 2: Map(6) {'score' => 10, 'submittedAt' => t, 'characterUsed' => 1, 'id' => 'mvwDUfGMaQt7CMyzhXs', 'username' => 'testName', ... }
// 3: Map(6) {'userId' => 'iukQSLQOvqYcRx85rBAoz3BfDM13', 'characterUsed' => 2, 'score' => 9, 'id' => 'bECAnhTmSIoWPiFRwy9V', 'submitedAt' => t, ...}
// 4: Map(6) {'username' => 'TestLorenzofefe', 'userId' => 'iukQSLQOvqYcRx85rBAoz3BfDM13', 'characterUsed' => 4, 'submittedAt' => t, 'id' => 'WdCP1facjsm2qDhjT1ES', ... }
// 5: Map(6) {'username' => 'testName', 'score' => 7, 'userId' => 'iukQSLQOvqYcRx85rBAoz3BfDM13', 'submittedAt' => t, 'characterUsed' => 1, ...}
// 6: Map(6) {'characterUsed' => 2, 'username' => 'TestLorenzofefe', 'score' => 6, 'submittedAt' => t, 'userId' => 'iukQSLQOvqYcRx85rBAoz3BfDM13', ...}
// 7: Map(6) {'id' => 'QJhnpbDBGTBAC3jrqOzL', 'characterUsed' => 2, 'username' => 'TestLorenzofefe', 'userId' => 'iukQSLQOvqYcRx85rBAoz3BfDM13', 'score' => 5, ... }
// 8: Map(6) {'characterUsed' => 3, 'submittedAt' => t, 'score' => 4, 'username' => 'TestLorenzofefe', 'userId' => 'iukQSLQOvqYcRx85rBAoz3BfDM13', ...}
// 9: Map(6) {'id' => 'BYrGJo4WBtb3nicOvD9y', 'submittedAt' => t, 'username' => 'testName', 'score' => 3, 'userId' => 'iukQSLQOvqYcRx85rBAoz3BfDM13', ...}
// 10: Map(6) {'userId' => 'iukQSLQOvqYcRx85rBAoz3BfDM13', 'submittedAt' => t, 'username' => 'testName', 'core' => 1, 'characterUsed' => 2, ...}
// 11: Map(6) {'username' => 'TestLorenzofefe', 'id' => 'Vw7tTeTLO4aQBXkkffZc', 'submittedAt' => t, 'characterUsed' => 2, 'score' => 0, ...}
// 12: Map(6) {'username' => 'TestLorenzofefe', 'submittedAt' => t, 'id' => 'P7bsnHFbPXW5UO3IOD4B', 'core' => 0, 'characterUsed' => 3, ...}
// length: 13.
console.log(list.length)。
//輸出0。
return list. map((map:Map<string, any>/span>) => Leaderboard. fromMap(map)); //immediately returns a empty array.
})
);
}
這就是提供者
class FirestoreLeaderboardProvider 實作 LeaderboardProvider {
private firestore: firebase.firestore.Firestore。
private leaderboardCollection: firebase.firestore。 CollectionReference<firebase.firestore.DocumentData> 。
constructor(period: string){
this.firestore = firebase.firestore()。
this.leaderboardCollection = this。 firestore.collection(period "Leaderboard") 。
}
public observeLeaderboardSortedByScore(limit = 1, startAt? : any): Observable<Map<string, any> []> {
let query = this.leaderboardCollection. orderBy("score", "desc").limit(極限)。
if (startAt) query = query.startAt(startAt)。
return new Observable< Map<string, any>[]>((observer) =>/span> {
let map: Map<string, any> [] = [];
const unsubscribe = query.onSnapshot((snapshot) => {
const test = snapshot.docs. map((val) => new Map(Object. entries(val.data())));
map.push(...test)。
});
observer.next(map)。
return unsubscribe。
});
}
因此,當我訂閱觀察器時,我得到一個空陣列,這是怎么回事?
uj5u.com熱心網友回復:
嘗試將observer.next(map);放在onSnapshot里面,否則它將不會發出最新的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/324501.html
標籤:
