我正在尝试使用云函数从起点获取子集合。我的云函数是用打字稿编写的,经过:
export async function getCollection(path: any, start:any, orderBy: any) {
return admin
.firestore()
.collection(path)
.orderBy(orderBy)
.startAfter(start)
.limit(10)
.get()
.then(snapshot => snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })));
}
我在Kotlin中用于从我的android应用程序调用云功能的代码是:
fun getReleasedAnimalsData(startAfter: DocumentSnapshot):Task<ReleasedData>{
/*val gsonObject = Gson().toJson(startAfter)
val jsonObject = JSONObject(gsonObject)*/
val data = hashMapOf("startAt" to startAfter)
return functions
.getHttpsCallable("function")
.call(data)
.continueWith { task ->
val json = Gson().toJson(task.result?.data)
val returnedData= Gson().fromJson(json,ReleasedData::class.java)
returnedData
}
}
当我尝试进行呼叫时,出现以下错误:
Object cannot be encoded in JSON: DocumentSnapshot
我知道Document Snapshot是一个复杂的对象,无法像这样进行序列化,但是我似乎找不到没有文档快照就可以从Firebase调用startAfter属性的方法。
您可能想知道:为什么他不通过Android Firebase SDK拨打电话?这是因为我要执行的任务是更大算法的一部分,我希望仅对进行一次调用,而不是从android应用中进行多次调用。有没有办法使之成为可能?还是我应该放弃并使用协同程序进行多个异步调用?
任何帮助表示赞赏!:)
如果您不能将DocumentSnapshot对象传递给startAfter
,则只需传递orderBy
查询部分中使用的字段的值即可。有关startAfter的信息,请参阅API文档。它需要字段值或文档快照。和:
提供的值的顺序必须与查询的order by子句的顺序匹配。
因此,如果在字段X上有一个orderBy,则可以为您看到的最后一个文档的字段X传递一个值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句