Трудно точно сказать, в чем заключается ваша проблема, исходя из получаемой ошибки (что на самом деле не имеет смысла! :-)), но, вероятно, это связано с тем, что userMap
не является итеративным.
Как вы прочтете в do c (раздел «Только для итераций» внизу страницы):
Синтаксис распространения (отличный от случай свойств распространения) может применяться только к итерируемым объектам.
Вы можете проверить, что userMap
не итерируемый с помощью функции, которую вы найдете в следующем SO answer .
Причина в том, что тип карты в Firestore «представляет объект , встроенный в документ» (как объяснено в документации о типах данных) и этот объект на самом деле это не карта stricto sensu , а просто и объект .
Как объяснено на карте do c (раздел "Объекты против карт"):
Объект похож на карту: оба позволяют вам установить ключи к значениям, извлекать эти значения, удалять ключи и определять, хранится ли что-то в ключе. По этой причине (а также потому, что не было встроенных альтернатив), Объекты исторически использовались как Карты.
Тем не менее, существуют важные различия, которые делают карту предпочтительной в некоторых случаях:
. ....
- Карта является итеративной, поэтому ее можно итерировать напрямую
- Итерация по объекту требует некоторого способа получения его ключей и итерации по ним.
Вы можете проверить, что userMap
на самом деле не является картой, выполнив
console.log(userMap instanceof Map); // -> False
Таким образом, использование Object.entries()
должно решить проблему следующим образом:
const getUser = await admin.firestore()
.collection("users")
.doc(context.auth.uid)
.get();
const userFriendsMap = getUser.data().friendsMap;
const userFriendsArray = Object.entries(userMap);
const userIDLIST = new Array(...userFriendsArray).map(pairs => pairs[0]);