ABAP 里没有 RxJS using 的同名 Operator,但能做出可靠的资源作用域
一个很典型的 SAP 后台程序场景,是从销售订单表读取几十万条记录,生成 CSV 文件,再把文件交给外围系统。程序开始时打开文件,中途持续写入,处理结束后关闭文件。麻烦往往不在正常路径,而在第十万条数据发生转换异常、权限异常或者数据库异常时,文件句柄还能不能被可靠关闭。这正是 RxJSusing试图解决的问题。RxJS 官方文档把using描述为一种工厂型 Operator。它接收资源工厂和 Observable 工厂。每次发生订阅时,资源工厂创建一个实现了unsubscribe的资源对象,Observable 工厂利用这个资源产生数据流。当数据流正常完成、发生错误或者订阅被主动取消时,资源对象的unsubscribe都会被调用。每次订阅会得到独立资源,不会在订阅之间自动共享。(RxJS)ABAP 没有 Observable 订阅模型,也没有一个与 RxJSusing一一对应的内置 Operator。ABAP 能做到同样重要的目标,也就是把资源的创建、使用和释放放进一个受控作用域,但实现方式通常是TRY ... CLEANUP、显式关闭语句、资源包装类以及回调对象的组合。这里最容易产生误解的地方,是把 ABAPCLEANUP直接当作 Javafinally