Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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
Javascript 如何返回和解析从Firebase服务器返回到客户端的文档?_Javascript_Ios_Firebase_Google Cloud Functions - Fatal编程技术网

Javascript 如何返回和解析从Firebase服务器返回到客户端的文档?

Javascript 如何返回和解析从Firebase服务器返回到客户端的文档?,javascript,ios,firebase,google-cloud-functions,Javascript,Ios,Firebase,Google Cloud Functions,前言:我是一名投入Node/JS的iOS程序员。我创建了一个https.onCall函数,因为我需要执行多个读写操作。在最终的更新承诺中,我希望以一种可以解码为DocumentSnapshot的形式返回数据(因为这很容易转换为模型),但我也很乐意按照最佳实践来做 这就是相关代码的外观: return group.ref.set({ members: admin.firestore.FieldValue.arrayUnion(user) }, { merge: true }).then(res

前言:我是一名投入Node/JS的iOS程序员。我创建了一个
https.onCall
函数,因为我需要执行多个读写操作。在最终的更新承诺中,我希望以一种可以解码为
DocumentSnapshot
的形式返回数据(因为这很容易转换为模型),但我也很乐意按照最佳实践来做

这就是相关代码的外观:

return group.ref.set({
  members: admin.firestore.FieldValue.arrayUnion(user)
}, { merge: true }).then(result => {
   // The additional `get` seems necessary because the completion block doesn't contain the updated document's data
   return group.ref.get().then(doc => {
     return doc
  })
})
我还尝试返回
return group.ref.get()
,但都未能在iOS端解析:

// This fails to cast
guard let document = result?.data as? DocumentSnapshot else { return }
我在想这是我可以做的另一个选择:

...
return {
  id: doc.id,
  data: doc.data()
}

然后在iOS端手动解码JSON。但这让我感觉非常麻烦,因此我希望有人能用一个更简单的解决方案来启发我。

可调用函数不接收或传递强类型数据。一切都归结为JSON,JSON被转换为两端相关的低级类型


如果您想从可调用函数传递DocumentSnapshot,您应该最少调用它的
data()
方法,以获得一个易于序列化的普通JavaScript对象,这正是您的替代方法所做的。就我个人而言,我不认为这是“严厉的”。这是不共享复杂类型序列化系统的系统之间非常典型的数据交换。

谢谢,我需要验证这是正确的方法。Re heavy Hand:考虑到有一些方法可以获取具有给定引用的文档,并使用所述文档轻松初始化您自己的自定义对象,我很好奇是否有一种方法可以连接到这些解码方法中。最糟糕的情况是,我可以查看源代码并在http请求周围实现一个包装器。感谢您的迅速回复!对于后代,我确实发现存在一种Firebase方法来解码可重用的对象:
Firestore.Decoder().decode(Model.self,from:data)