【发布时间】:2018-12-31 05:50:19
【问题描述】:
promoType 中的 obj = [字符串列表] 它更像是在这里运行 10 个 firebase 查询,查看 10 个特定的节点集并进一步下降。
我不确定,我是否需要对每个查询都设置 async / await,但我只想运行 10 个这样的查询,然后让我知道 couponKey 是否为空。我要做的就是显示输入的优惠券是否正确。
另外,在changeUserType(couponKey, couponFoundAtKey) 中,发生了一些数据库写操作。
fun checkPromo(promoCodeET: String) = async(UI) {
try {
val database = PersistentFirebaseUtil.getDatabase().reference
val job = async(CommonPool) {
for (obj in promoType) {
val query = database.child("promos").child(obj).orderByChild("promoCode").equalTo(promoCodeET)
query.addListenerForSingleValueEvent(object :
ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
if (dataSnapshot.exists()) {
couponKey = dataSnapshot.key.toString()
couponFoundAtKey = dataSnapshot.children.first().key.toString()
if (couponKey.isNotEmpty())
changeUserType(couponKey, couponFoundAtKey)
flag = true
}
}
override fun onCancelled(error: DatabaseError) {
// Failed to read value
}
})
if (flag) break
}
}
job.await()
}
catch (e: Exception) {
}
finally {
if (couponKey.isEmpty()){
Toast.makeText(this@Coupon, "Invalid coupon", Toast.LENGTH_LONG).show()
}
flag = true
}
}
【问题讨论】:
标签: android kotlin async-await coroutine kotlin-coroutines