Мне нужно получить конкретных пользователей, у которых есть поле 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);
}
});
});
Потому что в каждом цикле вы очищаете массив. Вы должны получить {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);
}