Я заметил, что вы уже используете Kotlin Coroutines, поэтому я бы предложил использовать библиотеку kotlinx-coroutines-play-services .
Включите ее в свой проект, добавив зависимость от вашего файла gradle:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$version'
И затем вы можете воспользоваться их функцией расширения await()
:
suspend fun getShortDynamicLinkUseCase(): ShortDynamicLink {
return Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
link = Uri.parse(uriString)
domainUriPrefix = dynamicLinkHost
}.await()
}
suspend fun getShortDynamicLink() {
try {
val shortLink = getShortDynamicLinkUseCase().await()
shortDynamicLinks.add(DynamicLinkData(appType, shortLink.shortLink))
getShortDynamicLinkSuccess()
} catch (throwable: Throwable) {
getShortDynamicLinkFailed(throwable)
}
}
fun dummyFun() = launch {
getShortDynamicLink().await() //adding dynamic link to the list when success performed
getShortDynamicLink().await() //adding dynamic link to the list when success performed
//refering to the list of dynamic links which is empty as it is performed quicker
//than onSuccess is called in getShortDynamicLink() function
someUseOf(shortDynamicLinks)
}