尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

ABAP 里有没有类似 RxJS throttle 的机制,关键不在找同名 Operator,而在复现它的节流语义

ABAP 里有没有类似 RxJS throttle 的机制,关键不在找同名 Operator,而在复现它的节流语义 在 SAP S/4HANA 的接口开发里,经常会碰到一种很实际的压力控制问题。某段业务逻辑在很短的时间里可能被调用几十次甚至几百次,但真正昂贵的动作并不希望执行这么多次。这个动作可能是调用外部 REST API,可能是重新计算一批价格,可能是触发库存 ATP 检查,也可能是向另一个 SAP 系统发送消息。熟悉 RxJS 的开发人员遇到这种情况,很自然会想到throttle。于是问题就变成了,ABAP 里面是不是也存在一个类似下面这种思想的东西,让一连串高频事件经过某种 Operator 以后,只允许其中少量事件继续向下执行。答案需要分成两个层面理解。ABAP 标准语言以及常用 ABAP 标准类库中,并不存在一个可以与 RxJSthrottle一一对应的throttle Operator。SAP 也没有提供一个通用的CL_ABAP_THROTTLE,可以直接套在任意事件流上。但 ABAP 完全能够实现throttle所表达的行为,而且企业后端里其实经常在做类似的事情,只是实现形态与 RxJS 完全不同。理解这里的差异,要回到 RxJSthrottle自己究竟干了什么。RxJS 官方定义很清楚。throttle收到源Observable的一个值以后,可以先把这个值发出去,随后进入一段静默期。在静默期内到达的源值会被忽略。静默期什么时候结束,并不一定由固定毫秒数决定,而是由durationSelector/
返回列表