我有一个名为GroupMemberEntity的我的模型的列表。
我想将该列表设置到我的收藏集中,每个列表都使用UUID来获得自己的唯一ID。
我当前的实现如下-
suspend fun addGroupMembers(
groupId: String,
users: List<GroupMemberEntity>
) = suspendCoroutine<ResponseHandler.Resource<Any>> { continuation ->
var insertCounter = 1
users.forEach { entity ->
FIRESTORE_DATABASE.collection(ACTIVITIES_COLLECTION)
.document(UUID.randomUUID().toString())
.set(entity)
.addOnSuccessListener {
insertCounter++
if (insertCounter != users.size) return@addOnSuccessListener
continuation.resume(responseHandler.handleSuccess())
}
.addOnFailureListener { exception ->
continuation.resume(responseHandler.handleException(exception))
}
}
}
我感觉可以通过不使用forEach
循环来改善这一点,但是我不确定如何。一般来说,循环进行网络通话似乎是个坏主意。
任何建议都会有所帮助。
答案 0 :(得分:1)
如果您希望每个实体都有自己的文档,则需要使用for-each
方法:
suspend fun addGroupMember(groupId: String, user: List<GroupMemberEntity>) {
users.forEach {
FIRESTORE_DATABASE.collection(ACTIVITIES_COLLECTION)
.document(UUID.randomUUID().toString())
.set(entity)
.await()
}
}
另一种也许更简单的方法是将整个列表发布在一个文档中。您以后可以在该文档中检索或查询(我认为)特定字段。为此,我要在您的uuid
中添加一个GroupMemberEntity
。但是我不确定这是否行得通。