Angular и Firestore, запросы не определены - PullRequest
0 голосов
/ 23 сентября 2019

После обновления кода старого проекта до последних версий 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 и вызываю вещь, как в примере старого кода выше, я получаю эта ошибка в консоли.

Я пытался добавить как можно больше деталей, но я не знаю, что означает эта ошибка.

1 Ответ

0 голосов
/ 23 сентября 2019

Вы ничего не возвращаете в свою карту switchMap.

return this.userProvider.user$.pipe(
  switchMap((user: User) => { ... })
);

этот оператор switchMap должен что-то возвращать.Подумайте о том, чтобы предоставить его или не использовать switchMap.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...