在Firebase云函数中返回地图为null

时间:2020-05-12 22:54:27

标签: android typescript firebase google-cloud-functions

我试图在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应用程序时,有效负载映射丢失了:

enter image description here

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

2 个答案:

答案 0 :(得分:1)

此地图就在这里:

let usersAndPhotos = new Map();

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

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

答案 1 :(得分:0)

除了道格的答案可以确定问题的根源之外,我还可以使用以下代码使解决方案更加动态:

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