Я создаю приложение для работы с firebase и typescript. У меня была эта функция, которая возвращает все проекты, которые текущий пользователь имеет в своем списке. но когда дело дошло до добавления в него информации, стало тяжело.
В конце концов я нахожу способ, но он все еще недостаточно хорош, но уж точно недостаточно чист и эффективен. Поэтому я использовал чат-бот для его оптимизации, и ответ был чистым и понятным, но я не могу понять, почему я получаю сообщение об ошибке:
Свойство «карта» не существует для типа «QuerySnapshot».
Я понятия не имею, что не так, так что, может быть, кто-нибудь из вас может указать на это ..?
Это функция:
const returnProjects = async (id:string) => {
const array: string[] = [];
const list = document.querySelector<HTMLDivElement>('#projectList');
const projects = await getDocs(collection(db, 'projects'));
const projectsUsersPromise = projects.map(async (doc: any) => ({
users: await getCountFromServer(collection(db, `projects/${doc.id}/users`)),
data: doc.data(),
}));
const projectsUsers = await Promise.all(projectsUsersPromise);
projectsUsers.forEach((project: any) => {
const amountUsers = project.users.data().count;
const { name } = project.data();
const newElement = document.createElement('div');
if (list) list.appendChild(newElement).setAttribute('class', 'projectCard');
newElement.innerHTML = `
<h4>${name}</h4>
<div id='cardBottom'>
<div id='cardUsers'>
<img src='/src/img/user.svg' alt='Users' width='12vw' id='projectUsers'>
<span>${amountUsers}</span>
</div>
<img src='/src/img/info.svg' alt='Further information about this project' width='15vw' id='projectInfo'>
</div>
`;
});
};
Отвечает ли это на ваш вопрос? Node, функции Firebase Свойство «карта» не существует для типа «Promise<QuerySnapshot>»
Это так просто, скопируйте ошибку и вставьте ее в поисковую систему Google, и вы получите ответ. Все, не больше не меньше stack overflow с похожей ошибкой выскакивает в поиске google.
Как упоминал @Doug Stevenson в соответствии с в этой ссылкеQuerySnapshot
нет никакого метода карты. Если вы хотите использовать метод карты на projects
, вы можете использовать projects.docs.map
, тогда вы будете отображать через Array<QueryDocumentSnapshot<T>>
, у которого есть метод карты.
В качестве альтернативы вы также можете использовать projects.forEach
, но тогда вы потеряете накопление обещаний, подобных тому, что вы сделали на карте.
Вот обновленный код:
const returnProjects = async (id: string) => {
const list = document.querySelector<HTMLDivElement>('#projectList');
const projects = await getDocs(collection(db, 'projects'));
const projectsPromises = projects.docs.map(async (doc: any) => {
const users = await getCountFromServer(collection(db, `projects/${doc.id}/users`));
const { name } = doc.data();
return { name, users: users.data().count };
});
const projectsData = await Promise.all(projectsPromises);
projectsData.forEach((project: any) => {
const newElement = document.createElement('div');
if (list) list.appendChild(newElement).setAttribute('class', 'projectCard');
newElement.innerHTML = `
<h4>${project.name}</h4>
<div id='cardBottom'>
<div id='cardUsers'>
<img src='/src/img/user.svg' alt='Users' width='12vw' id='projectUsers'>
<span>${project.users}</span>
</div>
<img src='/src/img/info.svg' alt='Further information about this project' width='15vw' id='projectInfo'>
</div>`;
});
};
Я приветствую вас за помощь мне! респект вам
Ошибка говорит вам, что QuerySnapshot не имеет метода с именем map. Если вы хотите узнать, что может делать QuerySnapshot (он определенно не может делать карту), посмотрите справочник по API (и не полагайтесь на ИИ при написании кода). firebase.google.com/docs/reference/js/v8/…