在以下代码中:
http://jsfiddle.net/staltz/4gGgs/27/
var clickStream = Rx.Observable.fromEvent(button, 'click');
var multiClickStream = clickStream
.buffer(function() { return clickStream.throttle(250); })
.map(function(list) { return list.length; })
.filter(function(x) { return x > 1; });
// Same as above, but detects single clicks
var singleClickStream = clickStream
.buffer(function() { return clickStream.throttle(250); })
.map(function(list) { return list.length; })
.filter(function(x) { return x === 1; });
// Listen to both streams and render the text label accordingly
singleClickStream.subscribe(function (event) {
document.querySelector('h2').textContent = 'click';
});
multiClickStream.subscribe(function (numclicks) {
document.querySelector('h2').textContent = ''+numclicks+'x click';
});
Rx.Observable.merge(singleClickStream, multiClickStream)
.throttle(1000)
.subscribe(function (suggestion) {
document.querySelector('h2').textContent = '';
});clickStream序列在merge之后将被迭代多少次?我是说,看起来会是这样吗:
案例1
for(numclicks : clickStream.length){
if (numclicks === 1){
document.querySelector('h2').textContent = 'click';
}
};
for(numclicks : clickStream.length){
if (numclicks > 1){
document.querySelector('h2').textContent = ''+numclicks+'x click';
}
};或者,它将在内部,真正合并成这样的东西(伪代码):
案例2
for(numclicks: clickStream.length){
if (numclicks === 1){
document.querySelector('h2').textContent = 'click';
}else if(numclicks > 1){
document.querySelector('h2').textContent = ''+numclicks+'x click';
}
}我个人认为,这种合并只是顺序地将流应用于其参数(案例1)。
我希望能有这样的标准。但如果没有-我对RxCpp和钠的实现特别感兴趣。我以js为例,因为它更具有交互性。
发布于 2015-09-08 04:10:09
fromEvent返回一个热源,因此所有订阅者都共享for循环的相同迭代。
忽略油门调用,其结果类似于:
for(numclicks: clickStream.length){
// first subscription
if (numclicks === 1){
document.querySelector('h2').textContent = 'click';
}
// second subscription
if(numclicks > 1){
document.querySelector('h2').textContent = ''+numclicks+'x click';
}
// merged subscription
if (numclicks === 0) {
document.querySelector('h2').textContent = '';
}
}油门调用意味着唯一单击流for循环的主体实际上只是将单击事件推入两个缓冲区,并在三个节气门操作符中每个重新设置计时器。当三个节气门计时器中的一个点火时,就会设置h2。由于定时器是不共享的,所以就像每个节流阀定时器的单独的for循环一样,每个循环将h2设置为三个可能的值中的一个:
这种行为在所有的Rx家族中都是相似的。
特别是在rxcpp方面:
rxcpp缺少缓冲区重载,该重载允许可观察到的缓冲区触发到新缓冲区的转换。rxcpp还没有实现节流。在默认情况下,rxcpp并不是线程安全的(付费),因此如果油门计时器使用引入线程,那么必须使用协调来显式地增加线程安全性。
https://stackoverflow.com/questions/32445222
复制相似问题