如何让下面的流收集器接收“hello”?收集器调用myFunction1(),myFunction1()又调用myFunction2()。两者都是挂起函数。目前,当我点击运行时没有任何React,也没有收到流。我在这里错过了什么吗?第一个
myFunction1()
myFunction2()
hjzp0vay1#
您可以尝试使用emitAll函数来处理您的情况:
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。
Flow
suspend
flow
pu82cl6c2#
除非你有非常具体的原因,否则从repo返回Flow的函数不应该挂起(因为flow{}构建器没有挂起),因为挂起的操作是收集(等待值出来)。根据您提供的代码,您将查找flatMapLatest函数。Docs here
flow{}
flatMapLatest
class Repo { fun function1() = flow { val value = doSomething() emit(value) } .flatMapLatest { emittedValue -> function2() } fun function2() = flow {...} }
2条答案
按热度按时间hjzp0vay1#
您可以尝试使用
emitAll
函数来处理您的情况:emitAll
函数从Flow
中收集由myFunction2()
函数创建的所有值,并将它们发送到收集器。而且没有理由在每个函数之前设置一个
suspend
修饰符,flow
构建器也不是suspend
。pu82cl6c2#
除非你有非常具体的原因,否则从repo返回
Flow
的函数不应该挂起(因为flow{}
构建器没有挂起),因为挂起的操作是收集(等待值出来)。根据您提供的代码,您将查找
flatMapLatest
函数。Docs here