Подтолкнуть объект к массиву, реагировать на родной

Мне нужно получить конкретных пользователей, у которых есть поле serviceClientID в firestore.

те, что есть, я вставляю в массив и помещаю в свои чаты состояния (setChat).

но проблема в том что в мое состояние заходит только один пользователь а у меня два пользователя с этим полем.

почему входит только 1 а не 2?

код ниже:

firebase.auth().onAuthStateChanged(async ({ uid }) => {
          const servicesCollection = await firestore()
            .collection('Providers')
            .doc(uid)
            .collection('ServiceHistory')
            .get();
          servicesCollection.docs.forEach(async item => {
            if (item.exists && item.data().serviceClientID) {
              const clientsCollection = await firestore()
                .collection('Clients')
                .doc(item.data().serviceClientID)
                .get();

              // if (item.data().serviceClientID === clientsCollection.id) {
              const values = {
                id: clientsCollection.id,
                name: clientsCollection.data().name.last,
                uid,
              };
              const arr = [];

              arr.push(values);
              // }
              console.info('arrayay', arr);

              setChats(arr);
            }
          });
        });
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
0
1 078
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потому что в каждом цикле вы очищаете массив. Вы должны получить {arr} из функции. затем вам нужно вставить данные внутрь.

const firebaseFunc =  () => {
      let arr = [];

      firebase.auth().onAuthStateChanged(async ({ uid }) => {
        const servicesCollection = await firestore()
            .collection('Providers')
            .doc(uid)
            .collection('ServiceHistory')
            .get();
        servicesCollection.docs.forEach(async item => {
          if (item.exists && item.data().serviceClientID) {
            const clientsCollection = await firestore()
                .collection('Clients')
                .doc(item.data().serviceClientID)
                .get();
            arr.push({
              id: clientsCollection.id,
              name: clientsCollection.data().name.last,
              uid,
            });
          });
      });

      setChats(arr);
      console.info('arrayay', arr);
    }

Другие вопросы по теме