Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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 bufferWithCount()未暂停超时_Javascript_Node.js_Rxjs_Reactive Extensions Js - Fatal编程技术网

Javascript RxJS bufferWithCount()未暂停超时

Javascript RxJS bufferWithCount()未暂停超时,javascript,node.js,rxjs,reactive-extensions-js,Javascript,Node.js,Rxjs,Reactive Extensions Js,我正试图控制缓慢用户的流入。在NodeJS中尝试了以下内容 var xmlNodeStream = Rx.Observable.from([1,2,3,4,5,6,7,8,9,10,11]); var commJson = xmlNodeStream.bufferWithCount(2).publish(); var FastSubscriber = commJson.subscribe( function (x) { console.log('----------\nFastS

我正试图控制缓慢用户的流入。在NodeJS中尝试了以下内容

var xmlNodeStream = Rx.Observable.from([1,2,3,4,5,6,7,8,9,10,11]);

var commJson = xmlNodeStream.bufferWithCount(2).publish();

var FastSubscriber = commJson.subscribe(
      function (x) { console.log('----------\nFastSub: onNext: %s', x); },
      function (e) { console.log('FastSub: onError: %s', e); },
      function () { console.log('FastSub: onCompleted'); });

var slowSubscriber = commJson.subscribe(function (x) {
    setTimeout(function () { console.log("============\nSlowsub called: ", x); }, 5000);
});

commJson.connect();
当我启动时,我希望慢速订阅服务器每次在收到下一批数据之前暂停5秒

但事实并非如此。在最初的5秒延迟后,所有数据以2个批次的方式被淹没到
slowSubscriber


控制流入的正确方法是什么,以便慢子系统可以花时间(最好是快子系统可以等待慢子系统完成)?

它没有暂停,因为
setTimeout
不会阻止执行,它只是安排工作在稍后时间完成,即2秒后,然后,更多的数据进入,它被安排在2秒钟+一些微小的增量从现在开始。结果是快速和慢速订阅者将同时完成,但慢速订阅者的结果要到2秒后才能显示出来

如果您的实际用例中的慢速订阅者实际上是非阻塞的,那么您有两个控制事件流的选项,或者您需要控制来自消息源的流,无论在哪里。或者您需要使用一个背压操作符,如
controlled()


它不会暂停,因为
setTimeout
不会阻止执行,它只是将工作安排在稍后的时间完成,即2秒后,会有更多数据进入,并安排2秒+从现在开始的一些微小增量。结果是快速和慢速订阅者将同时完成,但慢速订阅者的结果要到2秒后才能显示出来

如果您的实际用例中的慢速订阅者实际上是非阻塞的,那么您有两个控制事件流的选项,或者您需要控制来自消息源的流,无论在哪里。或者您需要使用一个背压操作符,如
controlled()


它不会暂停,因为
setTimeout
不会阻止执行,它只是将工作安排在稍后的时间完成,即2秒后,会有更多数据进入,并安排2秒+从现在开始的一些微小增量。结果是快速和慢速订阅者将同时完成,但慢速订阅者的结果要到2秒后才能显示出来

如果您的实际用例中的慢速订阅者实际上是非阻塞的,那么您有两个控制事件流的选项,或者您需要控制来自消息源的流,无论在哪里。或者您需要使用一个背压操作符,如
controlled()


它不会暂停,因为
setTimeout
不会阻止执行,它只是将工作安排在稍后的时间完成,即2秒后,会有更多数据进入,并安排2秒+从现在开始的一些微小增量。结果是快速和慢速订阅者将同时完成,但慢速订阅者的结果要到2秒后才能显示出来

如果您的实际用例中的慢速订阅者实际上是非阻塞的,那么您有两个控制事件流的选项,或者您需要控制来自消息源的流,无论在哪里。或者您需要使用一个背压操作符,如
controlled()


非常感谢@paulpdaniels这个解释很有道理。关于
conroller.request
,如果我们不知道哪个订户速度慢(比如,多个订户使用ajax调用),如何同步所有子服务器以等待完成?(如果范围不同或答案较长,我可以提出另一个问题)。谢谢你的回答。这非常有用。@GopalakrishnaPalem如果您的订阅者是异步的,您需要使用类似于
concatMap
的东西来执行异步工作,而不会“被淹没”:
comJson.concatMap(函数(x){return Rx.Observable.timer(5000).map(函数(t){console.log(“slowsub called”,x);});}.subscribe()非常感谢@paulpdaniels这个解释很有道理。关于
conroller.request
,如果我们不知道哪个订户速度慢(比如,多个订户使用ajax调用),如何同步所有子服务器以等待完成?(如果范围不同或答案较长,我可以提出另一个问题)。谢谢你的回答。这非常有用。@GopalakrishnaPalem如果您的订阅者是异步的,您需要使用类似于
concatMap
的东西来执行异步工作,而不会“被淹没”:
comJson.concatMap(函数(x){return Rx.Observable.timer(5000).map(函数(t){console.log(“slowsub called”,x);});}.subscribe()非常感谢@paulpdaniels这个解释很有道理。关于
conroller.request
,如果我们不知道哪个订户速度慢(比如,多个订户使用ajax调用),如何同步所有子服务器以等待完成?(如果范围不同或答案较长,我可以提出另一个问题)。谢谢你的回答。这非常有用。@GopalakrishnaPalem如果您的订阅者是异步的,您需要使用类似于
concatMap
的东西来执行异步工作,而不会“被淹没”:
comJson.concatMap(函数(x){return Rx.Observable.timer(5000).map(函数(t){console.log(“slowsub called”,x);});}.subscribe()非常感谢@paulpdaniels这个解释很有道理。关于
conroller.request
,如果我们不知道哪个订户速度慢(比如,多个订户使用ajax调用),如何同步所有子服务器以等待完成?(如果范围不同或答案较长,我可以提出另一个问题)。谢谢你的回答。这是非常有用的。@GopalakrishnaPal
var xmlNodeStream = Rx.Observable.from([1,2,3,4,5,6,7,8,9,10,11]);

var controller = xmlNodeStream.bufferWithCount(2).controlled();
var commJson = controller.publish().refCount();

var FastSubscriber = commJson.subscribe(
      function (x) { console.log('----------\nFastSub: onNext: %s', x); },
      function (e) { console.log('FastSub: onError: %s', e); },
      function () { console.log('FastSub: onCompleted'); });

var slowSubscriber = commJson.subscribe(function (x) {
    setTimeout(function () { 
                console.log("============\nSlowsub called: ", x); 
                controller.request(1);
               }, 5000);
});

commJson.request(1);