因此,我试图将两个玩家配对到一个游戏中,并为for循环执行时间而苦苦挣扎。我正在使用Firebase Firestore作为后端。我希望每个for循环迭代都等到最后一个完成,因为循环内的每个事务都需要一两秒钟,而我只想加入一个游戏。现在,它基本上加入了所有空游戏,因为for循环不等待最后一个循环完成。我相信这是一个异步/同步问题。
这是我的for循环代码:
for (document: DocumentSnapshot in task.result) {
firestoreInstance.runTransaction(Transaction.Function<Void> { transaction ->
val snapshot = transaction.get(document.reference)
transaction.update(document.reference, "joiner", FirebaseAuth.getInstance().uid)
// Success
null
}).addOnSuccessListener {
Log.d(TAG, "Transaction success!")
onComplete(document.reference)
gameJoined = true
}.addOnFailureListener { e ->
Log.w(TAG, "Transaction failure.", e)
onComplete(null)
}
}
任何建议都会有所帮助。谢谢!
答案 0 :(得分:3)
使用递归:
fun myLoopOrWhatever(result: List<DocumentSnapshot>, index: Int) {
val doc = result[index]
firestoreInstance.runTransaction(Transaction.Function<Void> { transaction ->
val snapshot = transaction.get(doc.reference)
transation.update(doc.reference, "joiner", FirebaseAuth.getInstance().uid)
null
}).addOnSuccessListener {
//your logic
if (index < result.size) myLoopOrWhatever(result, index++)
}.addOnFailureListener { e ->
//your logic
if (index < result.size) myLoopOrWhatever(result, index++)
}
}
通过传递task.result
和0
来开始。
我只是猜测task.result
是一个List对象。它可能是ArrayList或其他。您可能需要调整该类型。