Я пытаюсь загрузить несколько файлов в Firebase и хотел бы связать его с другим ребенком, когда все задачи загрузки будут выполнены.Чтобы добиться этого, я пытался использовать сопрограммы в kotlin.Ниже приведен код (пожалуйста, исправьте меня, если я ошибаюсь, потому что я действительно плох в сопрограммах):
fun create(placemark: PlacemarkModel,callback: () -> Unit=fun(){})=runBlocking {
val key = db.child("users").child(userId).child("placemarks").push().key
placemark.id = key!!
placemarks.add(placemark)
db.child("users").child(userId).child("placemarks").child(key).setValue(placemark)
uploadImage(placemark.dp,"dp",placemark)
if (placemark.images.size>0){
placemark.images.forEach{
uploadImage(it,"images",placemark,placemark.images.indexOf(it))
}
}
А вот моя функция uploadImage
, которую я намеревался ждать, пока она не закончит свою работу и пройдетвернуться URI к основной функции
suspend fun uploadImage(image:String,
type:String,
placemark: PlacemarkModel,
index:Int=0,
callback:()->Unit=fun(){}):URI{
st = FirebaseStorage.getInstance().reference
info("Coroutines 2")
val imageRef = st?.child(userId + '/' + File(image).name)
val data=readAndCompress(image)
data?.let {
var uploadTask=imageRef?.putBytes(data)
uploadTask?.addOnFailureListener {
println(it.message)
}?.addOnSuccessListener { taskSnapshot ->
//I want to return the URI here however return is not allowed
}
}
}
Спасибо за ваше время.