ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

SAP UI5 如何实现 RxJS concatMap 式的串行异步任务控制

SAP UI5 如何实现 RxJS concatMap 式的串行异步任务控制 在一个真实的 SAP Fiori 业务页面里,用户连续点击保存、审批、过账或者批量处理按钮时,经常会出现一个很具体的问题。前一次 OData 请求尚未完成,后一次操作已经进入 Controller。两个请求可能并行抵达后端,后发请求甚至可能先完成,页面上的 Busy 状态、成功消息、错误消息和绑定刷新也开始互相覆盖。熟悉 RxJS 的开发者此时很自然地会想到concatMap。它可以把连续到达的外层事件映射成内部异步任务,并且等当前任务完成以后才订阅下一个任务。因此问题可以更精确地表述为,SAP UI5 有没有一个原生 Operator,可以直接完成事件映射、任务排队、串行执行、错误传播和取消订阅。答案是,SAP UI5 没有与 RxJSconcatMap完全对等的原生 Operator,也没有内置的 Observable 操作符体系。SAP UI5 提供的是事件、数据绑定、Promise、OData 请求分组和生命周期管理机制。借助这些机制,可以实现concatMap的部分效果,也可以自己构造完整的串行队列。如果项目确实包含复杂事件流,直接在 SAP UI5 应用中引入 RxJS 也完全可行。理解这个结论,需要先把concatMap到底保证了什么说清楚。concatMap接收外层 Observable 发出的每一个值,调用投影函数,把该值转换为一个内部 Observable。某个内部 Observable 被订阅以后,只要它没有完成,后续外层值就会留在队列中。当前内部 Observable 完成后,队列中的下一个值才会被取出并转换成新的内部订阅。其关键不是简单的顺序输出
返回列表