
拿 SAP UI5 里最常见的事件处理代码来看,这个问题很容易产生一种直觉上的判断。RxJS 有take(1),SAP UI5 也经常需要监听一次press、一次路由匹配、一次dataReceived,处理完成后就不再响应,那么 UI5 是不是也有一个叫作take的东西。答案可以先定下来。SAP UI5 核心框架没有提供一个和 RxJStake(n)完全同构的 Reactive Operator,也没有一套内建的Observable.pipe(...)操作符体系。不过,SAP UI5 的sap.ui.base.EventProvider提供了一个非常重要的attachEventOnce方法。在事件监听这个限定场景中,attachEventOnce可以看成 UI5 对take(1)最接近的原生表达。对于take(2)、take(3)、take(n)这种一般情况,UI5 没有对应的通用原生方法,需要计数后主动detachEvent,或者直接在 UI5 项目中引入 RxJS,把 UI5 Event 转换成 Observable,再真正使用take(n)。理解这一点,关键不是比较两个 API 的名字,而是把 RxJStake到底做了什么拆开。RxJS 官方 API 对