我正在尝试创建一个类来接收传入的用户事件,处理它们然后将结果传递给订阅它的人:
class EventProcessor
{
val flux: Flux<Result>
fun onUserEvent1(e : Event)
{
val result = process(e)
// Notify flux that I have a new result
}
fun onUserEvent2(e : Event)
{
val result = process(e)
// Notify flux that I have a new result
}
fun process(e : Event): Result
{
...
}
}
然后,客户端代码可以订阅EventProcessor::flux
,并在每次成功处理用户事件时收到通知。
但是,我不知道该怎么做。我尝试使用flux
函数构造Flux::generate
,如下所示:
class EventProcessor
{
private var sink: SynchronousSink<Result>? = null
val flux: Flux<Result> = Flux.generate{ sink = it }
fun onUserEvent1(e : Event)
{
val result = process(e)
sink?.next(result)
}
fun onUserEvent2(e : Event)
{
val result = process(e)
sink?.next(result)
}
....
}
但这不起作用,因为我应该立即致电next
SynchronousSink<Result>
Flux::generate
传递给我sink
。我无法像示例中那样存储Flux::merge
:
reactor.core.Exceptions $ ErrorCallbackNotImplemented: java.lang.IllegalStateException:生成器没有调用任何一个 SynchronousSink方法
我还在考虑Flux::concat
和Flux
方法,但这些方法是静态的,它们会创建一个新的c++11
。我只是想把事情推到现有的变化中,这样任何拥有它的人都会得到通知。
基于我对反应类型的有限理解,这应该是一个常见的用例。但我发现实际实现起来非常困难。这让我怀疑我错过了一些关键的东西,或者我是以一种奇怪的方式使用该库,其中它并不打算被使用。如果是这种情况,我们热烈欢迎任何建议。