Kotlin循环计时

时间:2018-09-11 23:32:30

标签: android firebase for-loop kotlin google-cloud-firestore

因此,我试图将两个玩家配对到一个游戏中,并为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)
                            }
                        }

任何建议都会有所帮助。谢谢!

1 个答案:

答案 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.result0来开始。

我只是猜测task.result是一个List对象。它可能是ArrayList或其他。您可能需要调整该类型。