Android 如何延迟返回回调直到异步任务完成?
在函数中,我希望在onSuccessListener完成执行后调用返回数据Android 如何延迟返回回调直到异步任务完成?,android,firebase,google-cloud-firestore,async-await,kotlin-coroutines,Android,Firebase,Google Cloud Firestore,Async Await,Kotlin Coroutines,在函数中,我希望在onSuccessListener完成执行后调用返回数据 private fun getFirebaseDataReturnsResult( fieldName: String, documentName: String, userUID: String) : String { var data : String? = null val docRef = db.collection(documen
private fun getFirebaseDataReturnsResult(
fieldName: String,
documentName: String,
userUID: String) : String {
var data : String? = null
val docRef = db.collection(documentName).document(userUID)
docRef.get(source)
.addOnSuccessListener { document ->
if (document != null) {
data = document.getString(fieldName).toString()
}
}
.addOnFailureListener {
docRef.get().addOnSuccessListener { document ->
data = document?.getString(fieldName).toString()
}.addOnFailureListener { exception ->
data = exception.message.toString()
}
}
return data!!
}
db
是云Firestore的一个实例。
正在IO协同路由范围内的onViewCreated()
上调用getFirebaseDataReturnsResult()方法
我尝试在返回数据之前添加
delay()
,但我认为这似乎是一种不好的做法。docRef.get()
是异步的,会立即返回任务对象。如果你想在一个协同程序中使用这个对象,你应该强烈考虑制作<代码> GeFixBaseDATAtRelsStices结果 A<代码>暂停Fase并将该任务对象转换成你可以等待使用的东西。这还可以省去将侦听器附加到任务的麻烦,您只需使用try/catch即可。是的,这确实有效。我发现这篇文章可以帮助其他人解决同样的问题。