【发布时间】:2018-04-05 20:06:58
【问题描述】:
我想轮询一个响应速度较慢的 HTTP API,因此我不想同时对该 API 进行多次调用。
我想做的一个例子可能是:
const interval = Rx.Observable.interval(250).take(5); // Poll every 250ms
function simulateMaybeSlowHttpCall() {
return interval.delay(500).take(1); // The service takes 500ms to answer
}
interval
.mergeMap(val =>simulateMaybeSlowHttpCall().map(x => val), 1) // max concurrent is 1
.subscribe(val => console.log(val));
在这里,此代码将显示 1 2 3 4 5
但我不想做无用的电话。 以上代码运行时间为 250*5 = 1250 ms,1 次调用耗时 500ms,所以我想显示:
1 3 5
所以我的问题是:将并发设置为1(或任何其他值)时,如何丢弃所有未立即完成的调用?
JsFiddle:https://jsfiddle.net/zra3zxhs/63/
【问题讨论】:
-
听起来你应该使用
exhaustMap而不是mergeMap。 -
它似乎做我想做的事。您可以将其发布为答案,这样我会将其标记为已接受吗?
标签: javascript rxjs observable reactive-programming