Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript Firebase云函数:未定义不是函数_Typescript_Firebase_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

Typescript 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

我正在尝试将地图转换为具有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)


  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]);