ABAP 没有 exhaustMap Operator,但可以精确实现它的忙碌期间丢弃新请求语义

ABAP 没有 exhaustMap Operator,但可以精确实现它的忙碌期间丢弃新请求语义 从结论开始,ABAP 语言和标准类库里,没有一个与 RxJSexhaustMap一一对应、可以直接写成链式 Operator 的标准语法。ABAP 也没有原生的 Observable 管道模型,所以不能期待出现source-exhaust_map( ... )这种完全同构的 API。不过,如果讨论的是运行语义,而不是表面语法,ABAP 完全可以实现与exhaustMap相同的效果,而且在 SAP 业务系统里,这类模式其实很常见。最贴近的表达是,某个业务动作已经在执行时,后续同类触发直接被拒绝、忽略或者返回正在处理中,直到当前动作结束之后,新的触发才重新获得执行资格。RxJS 官方对exhaustMap的定义很精确。源 Observable 发出一个值时,exhaustMap把它映射成一个内部 Observable,并订阅这个内部 Observable。只要当前内部 Observable 还没有完成,源 Observable 后续发出的值就不会创建新的有效内部流程,而是被忽略。当前内部 Observable 完成以后,下一次源事件才会重新被接受。它与mergeMap、concatMap、switchMap的差异,恰好都集中在忙碌期间来了新事件怎么办这一点上。mergeMap倾向于并行接纳,concatMap倾向于排队等待,switchMap倾向于抛弃旧任务并切换到新任务,exhaustMap则保留正在运行的旧