我正在寻找一个解决方案,为创建动态短链接从onSuccess呼叫收集所有的结果。
缩短场景:
fun getShortDynamicLinkUseCase(
onSuccessListener: (ShortDynamicLink) -> Unit
): Task<ShortDynamicLink> = Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
link = Uri.parse(uriString)
domainUriPrefix = dynamicLinkHost
}.addOnSuccessListener {
onSuccessListener.invoke(it)
}
}
fun getShortDynamicLink() = launch {
try {
getShortDynamicLinkUseCase.execute(
// calling onSucces for creating dynamic links -> which is async I guess ?
onSuccessListener = { shortLink ->
shortDynamicLinks.add(DynamicLinkData(appType, shortLink.shortLink))
}
)
getShortDynamicLinkSuccess()
} catch (throwable: Throwable) {
getShortDynamicLinkFailed(throwable)
}
}
val shortDynamicLinks = mutableListOf<Uri?>()
fun dummyFun() {
getShortDynamicLink() //adding dynamic link to the list when success performed
getShortDynamicLink() //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)
}
发布于 2020-06-21 01:18:00
我注意到你已经在使用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)
}
https://stackoverflow.com/questions/62409208
复制相似问题