【问题标题】:Returning a map in Firebase cloud function is null在 Firebase 云函数中返回地图为空
【发布时间】:2020-08-28 23:33:40
【问题描述】:

我试图在 Firebase 云 onCall 函数中返回一组值,但是当我在我的 Android 应用程序中读取该值时,部分数据丢失。

这里是云功能:

exports.getPhotoUrls = functions.https.onCall(async (data, context) => {

  let usersAndPhotos = new Map();
  usersAndPhotos.set("bob", "2345");
  usersAndPhotos.set("sam", "345");

  const returnVal = {
    payload: usersAndPhotos,
    status: 200,
    message: "Success"
  }
  console.log("ReturnVal: " );
  console.log(returnVal)

  return returnVal
})

当我查看 Firebase 函数日志时,我看到返回值为:

{ payload: Map { 'bob' => '2345', 'sam' => '345' },
  status: 200,
  message: 'Success' }

但是,当函数返回到我的 Android 应用时,有效载荷 Map 丢失了:

为什么我的有效载荷地图数据消失了?

【问题讨论】:

    标签: android typescript firebase google-cloud-functions


    【解决方案1】:

    这张地图就在这里:

    let usersAndPhotos = new Map();
    

    是一个 ES6 Map 类型的对象。 Cloud Functions 可调用对象无法对其进行有效序列化。如果您想将地图发送回客户端,您应该改用一个普通的旧 JavaScript 对象,该对象具有对 JSON 的清晰直接序列化(这是用作实际负载的内容):

    let usersAndPhotos = {
      bob: "2345",
      sam: "345"
    }
    

    【讨论】:

    • 谢谢,道格。我做了很少的打字稿......我怎样才能动态地做到这一点?像 usersAndPhotos[name] = value 这样的东西?
    • 是的,你可以这样做。这实际上只是核心 JavaScript 语法。
    • 谢谢,道格。我喜欢你的 Youtube Firebase 云功能系列,顺便说一句!希望有更多!
    【解决方案2】:

    除了确定问题根源的 Doug 的回答之外,我还能够使用此代码使解决方案更具动态性:

    let usersAndPhotos: { Name: string; ID: string; }[] = []
    usersAndPhotos.push({Name: "bob", ID: "2345"});
    usersAndPhotos.push({Name: "sam", ID: "345"});
    

    【讨论】:

      猜你喜欢
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 2020-03-31
      • 2019-12-17
      • 2021-03-04
      • 2019-02-27
      • 2018-03-28
      相关资源
      最近更新 更多