首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Firebase短动态链接-等待多个短链接完成

Firebase短动态链接-等待多个短链接完成
EN

Stack Overflow用户
提问于 2020-06-16 21:03:59
回答 1查看 241关注 0票数 0

我正在寻找一个解决方案,为创建动态短链接从onSuccess呼叫收集所有的结果。

缩短场景:

代码语言:javascript
运行
复制
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)
        }
}
代码语言:javascript
运行
复制
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) 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-21 01:18:00

我注意到你已经在使用Kotlin Coroutines了,所以我建议你使用kotlinx-coroutines-play-services库。

通过将依赖项添加到gradle文件,将其包含在项目中:

代码语言:javascript
运行
复制
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$version'

然后你可以利用他们的await()扩展功能:

代码语言:javascript
运行
复制
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) 
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62409208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档