通过Kotlin中的另一个暂停功能发出流量

332nm8kg  于 2022-12-04  发布在  Kotlin
关注(0)|答案(2)|浏览(126)

如何让下面的流收集器接收“hello”?收集器调用myFunction1()myFunction1()又调用myFunction2()。两者都是挂起函数。
目前,当我点击运行时没有任何React,也没有收到流。我在这里错过了什么吗?
第一个

hjzp0vay

hjzp0vay1#

您可以尝试使用emitAll函数来处理您的情况:

fun myFunction1(): Flow<String> = flow {
    /*some code*/
    emitAll(myFunction2())
}

fun myFunction2(): Flow<String> = flow {
    /*some code*/
    emit("hello")
}

emitAll函数从Flow中收集由myFunction2()函数创建的所有值,并将它们发送到收集器。
而且没有理由在每个函数之前设置一个suspend修饰符,flow构建器也不是suspend

pu82cl6c

pu82cl6c2#

除非你有非常具体的原因,否则从repo返回Flow的函数不应该挂起(因为flow{}构建器没有挂起),因为挂起的操作是收集(等待值出来)。
根据您提供的代码,您将查找flatMapLatest函数。Docs here

class Repo {

  fun function1() = 
    flow {
      val value = doSomething()
      emit(value)
    }
    .flatMapLatest { emittedValue -> function2() }
  fun function2() = flow {...}
}

相关问题