После обновления кода старого проекта до последних версий Angular и RxJ я попытался обновить код настолько, насколько мог.
Вот мой старый код
Но теперь я получаю undefined
, когда речь идет о запросах.
scrollInit(chatRoomUid: string, chatType: ChatType, reverse?: boolean, opts?: any) {
this.query = {
path: 'chat_room_messages',
field: 'createdAt',
limit: 20,
reverse: reverse,
prepend: false,
...opts
};
return this.userProvider.user$.pipe(
switchMap((user: User) => {
if (!user) return of([]);
const first = this.afs.collection<ServerChatRoomMessage>(this.query.path, ref => {
let cRef = ref.where('usersUid', 'array-contains', user.uid);
cRef = cRef.where('chatRoomUid', '==', chatRoomUid);
cRef = cRef.where('chatType', '==', chatType);
return cRef
.orderBy(this.query.field, this.query.reverse ? 'desc' : 'asc')
.limit(this.query.limit);
});
console.log(first); # The first console log
this.mapAndUpdate(first);
this.data$ = this.data.asObservable().pipe(
scan((acc, val) => {
return this.query.prepend ? val.concat(acc) : acc.concat(val);
})
);
})
);
}
Как видите, я звоню this.mapAndUpdate(first)
с first
ТеперьmapAndUpdate()
private mapAndUpdate(collection: AngularFirestoreCollection) {
if (this.done.value || this.loading.value) return;
console.log(collection); # The second console log
this.loading.next(true);
return collection.snapshotChanges().pipe(
tap(arr => {
let values = arr.map(snap => {
const data = snap.payload.doc.data();
const doc = snap.payload.doc;
return { ...data, doc };
});
values = this.query.prepend ? values.reverse() : values;
this.data.next(values);
this.loading.next(false);
if (!values.length) this.done.next(true);
})).pipe(take(1)).subscribe();
}
Я сделал два console.log
вот результат для первый и второй один они одинаковы, но есть другой console.log
это происходит с первого раза, когда все undefined .
Теперь, когда я захожу на свою страницу Angular и вызываю вещь, как в примере старого кода выше, я получаю эта ошибка в консоли.
Я пытался добавить как можно больше деталей, но я не знаю, что означает эта ошибка.