push

abstract fun push(event: Event): Flow<EventResult>(source)

推送一个事件, 得到内部所有事件依次将其处理后得到最终的结果流。

结果流是 冷流 , 只有当对结果进行收集时事件才会真正的被处理。 事件内部实际的调度器由构造 EventProcessor 时的配置属性和具体实现为准。

返回结果的 Flow 会通过 Flow.flowOn 使上游切换到 EventDispatcherConfiguration.coroutineContext 中。

异常

如果事件处理器 EventListener 或者事件拦截器 EventInterceptor 的执行过程中产生了异常, 则对应位置的 EventResult 将会是包装了此异常的 StandardEventResult.Error, 且不会中断后续其他处理器或拦截器的执行。

eventDispatcher.push(event)
.onEach { result ->
if (result is StandardEventResult.Error) {
// 这个 result 代表了一个异常
}
}
.collect { ... }

如果事件调度拦截器在执行的过程中产生了异常,则会直接向 Flow 中抛出异常。此异常可通过 Flow.catch 得到。

eventDispatcher.push(event)
.catch {
// 调度拦截器 EventDispatchInterceptor 产生了异常
}
.collect { ... }

也可以通过一些预设的扩展API来处理部分特殊的响应结果。(对于特殊的响应结果可参考 StandardEventResult) 例如 Flow.filterNotInvalid 会过滤掉所有表示无效的返回值 StandardEventResult.Invalid:

eventDispatcher.push(event)
.filterNotInvalid() // 过滤掉所有 Invalid 类型结果
.collect { ... }

Java API

EventProcessors 的静态API中提供了一些非挂起的可供 Java 友好调用的API, 例如:

List<EventResult> resultList = EventProcessors.pushAndCollectToListAsync(processor, event, scope);
// ...
Flux<EventResult> resultList = EventProcessors.pushAndAsFlux(processor, event, scope);
// ...

其中提供了一些异步或响应式相关的转化、处理API。 对于它们各自的说明、限制、要求则在 push 的基础上参考它们的文档说明。

Return

EventResult 结果。如果具有特殊含义,那么可能是 StandardEventResult 中的某类型。