【问题标题】:Firebase cloud functions: undefined is not a functionFirebase 云函数:未定义不是函数
【发布时间】:2020-02-01 10:01:45
【问题描述】:

我正在尝试使用 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

我做错了什么?

提前致谢!

【问题讨论】:

    标签: typescript firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    根据你得到的错误很难准确地说出你的问题是什么(这并没有真正的意义!:-))但这可能是由于userMap 不是可迭代的事实造成的。

    正如您将在doc 中看到的那样(页面底部的“仅适用于可迭代”部分):

    扩展语法(除了扩展属性的情况)只能应用于可迭代对象。

    您可以使用以下 SO answer 中的函数检查 userMap 是否不是可迭代的。

    原因是 Firestore 中的 Map 类型“表示嵌入在文档中的 object”(如数据类型中的 documentation 中所述),而此 Object 实际上不是 Map 严格意义上的,但只是Object

    如地图doc(“对象与地图”部分)中所述:

    Object 类似于 Map:两者都可以让您将键设置为值,检索 这些值,删除键,并检测是否有东西存储在 钥匙。出于这个原因(并且因为没有内置 替代品),物体在历史上一直被用作地图。

    但是,有一些重要的区别使 Map 在 某些情况:

    .....

    • Map是可迭代的,所以可以直接迭代
    • 对 Object 进行迭代需要以某种方式获取其键并对其进行迭代。

    您可以通过以下方式检查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]);
    

    【讨论】:

      猜你喜欢
      • 2021-08-15
      • 2018-03-28
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 2017-10-07
      • 2019-08-05
      相关资源
      最近更新 更多