我试图在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应用程序时,有效负载映射丢失了:
为什么我的有效载荷地图数据消失了?
答案 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"});