我有一个(费时)计算,类似的东西:如何跳过可观测量的项目,而组合使用RxJS与流逝的定时器处理
async calculation(input: MyInputType): Promise<MyOutputType> {
// fetch some infos from an HTTP endpoint
// calculate result by combining received infos with input
return result; // Promise which resolves after all calculation is complete
}
计算所用的输入经由来自另一个部件一个可观察的(BehaviorSubject
),它发出的物品有时比他们可以处理的速度快。因此,输出依赖于http端点的可观察信息和获取的信息,这些信息也可能随时发生变化。
重要:只有的最后计算结果是我的应用程序相关,必须在任何时间的变量可用。
我的目标是使用RxJS和其反应性运营商设置一个可观察到的链具有以下行为:从所述源BehaviorSubject
- 物品发射而计算当前正在处理应该被忽略(backpressuring防止DoS)但是...
- 当前计算完成或发生超时时,如果有新的计算项目,则必须直接为最近的输入项目启动新的计算。
- 如果在至少5分钟内没有开始计算,则必须再次使用最近的输入项目开始新的计算。 (这对更新即将到来的http信息很重要)
有没有人有任何想法如何解决这个问题?
(我使用的是RxJS 5,TypeScript,Node.js,但也欢迎其他语言的反应式解决方案。)
我认为这个问题相当接近你想要达到的目标。 https://stackoverflow.com/q/46785128/482868 –
如果计算时间超过5分钟,会发生什么情况?是否还有新的计算开始,如果有的话,旧计算会发生什么? – concat
好问题,但是由于我在第二个项目符号中提到的超时,所以不应该发生这种情况。这个超时(计算本身)当然少于5分钟。因此在这种情况下可以放弃结果。 – Niehno