Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在RXJS中实现背压轮询_Javascript_Rxjs_Observable_Reactive Programming - Fatal编程技术网

Javascript 如何在RXJS中实现背压轮询

Javascript 如何在RXJS中实现背压轮询,javascript,rxjs,observable,reactive-programming,Javascript,Rxjs,Observable,Reactive Programming,我想轮询一个响应速度较慢的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 } inter

我想轮询一个响应速度较慢的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. 五,

但我不想打没用的电话。 上面的代码运行时间为250*5=1250毫秒,1次呼叫需要500毫秒,因此我想显示:

一, 3. 五,

所以我的问题是:当将concurrent设置为
1
(或任何其他值)时,如何放弃所有未立即完成的调用


jsidle:

使用并发性为1的
mergeMap
相当于
concatMap
。事实上,就是这样。这就是为什么示例中的每个间隔都会影响HTTP请求:它们是排队的

如果希望避免在HTTP请求挂起时启动或排队,可以使用:


当使用
defaustmap
时,它接收到的任何
下一个
通知都将被忽略,直到内部可观察(HTTP请求)完成。

这听起来像是一种您应该使用而不是
mergeMap
的情况。它似乎满足了我的要求。你能把它贴出来作为答案吗?那样我会把它标记为已接受?
interval
  .exhaustMap(val => simulateMaybeSlowHttpCall().map(x => val))
  .subscribe(val => console.log(val));