Typescript Firebase云函数:未定义不是函数
我正在尝试将地图转换为具有firebase云函数的数组 这是我的密码Typescript Firebase云函数:未定义不是函数,typescript,firebase,google-cloud-firestore,google-cloud-functions,Typescript,Firebase,Google Cloud Firestore,Google Cloud Functions,我正在尝试将地图转换为具有firebase云函数的数组 这是我的密码 let map = new Map(); map.set("1", 1); map.set("2", 2); console.log(new Array(...map).map(pairs => pairs[0])); // Upper code not relevant: just to test, but prints ["1", "2"] in the firebase logs) c
let map = new Map();
map.set("1", 1);
map.set("2", 2);
console.log(new Array(...map).map(pairs => pairs[0]));
// Upper code not relevant: just to test, but prints ["1", "2"] in the firebase logs)
const getUser = await admin.firestore()
.collection("users")
.doc(context.auth.uid)
.get();
let userMap = getUser.data()['friendsMap'];
console.log(userMap);
// Prints this in the firebase logs: { '1234ab': 'Jeff',
5678ab: 'Bob' }
let userIDLIST = new Array(...userMap).map(pairs => pairs[0]);
console.log('userIDLIST:'+userIDLIST);
当我想将userMap转换为userIDLIST数组的最后几行代码时,我得到了以下错误:
Unhandled error TypeError: undefined is not a function
我做错了什么
提前谢谢 根据您得到的错误很难准确地说出您的问题所在,而这些错误并不是真正有意义的!:-但这可能是因为userMap不是一个iterable 正如您将在本页底部的“仅适用于iterables”一节中所读到的: 除排列属性之外的排列语法只能应用于iterable对象 您可以检查userMap是否不是一个iterable函数,您将在下面的SO中找到该函数 原因是Firestore中的映射类型表示嵌入在文档中的对象,如on data Types中所述,该对象实际上不是严格意义上的对象,而只是一个简单的对象 如地图部分“对象与地图”所述: 对象类似于映射:两者都允许您设置值的键,检索 这些值,删除键,并检测某个位置是否存储了内容 钥匙因为这个原因,也因为没有内置的 在历史上,对象一直被用作地图 然而,有一些重要的差异使得Map在这方面更受欢迎 某些情况: 映射是可迭代的,因此可以直接迭代 迭代对象需要以某种方式获取其键并对其进行迭代。 您可以通过执行以下操作来检查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]);