前言:我是一名iOS程序员,正在深入Node/JS。我创建了一个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对象,这就是你的替代方法。就我个人而言,我并不认为这是"高压手段"。这是不共享复杂类型序列化系统的系统之间非常典型的数据交换。