[rxjs] Shares a single subscription -- publish()
2015-08-24 15:45
274 查看
If have an observable and you subscribe it twice, those tow subscritions have no connection.
Result:
publish():
Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence.
Results:
You can see the result just have one single subscrition then.
You can dispose the connection:
Results:
There is a problem when you connect the published observables at different place.
Results:
If we move the connect() funciton up before subscribe(). Then we missed the very first console.log(); It means connection is already start, but no one subscribe it yet.
Therefore, we don't use publish() funciton alone, more than often we use publish().refCount() function together.
console.clear(); var Observable = Rx.Observable; var _id = 1; var source = Observable.create(function(Observe){ var myId = _id++; Observe.onNext('Observable ' + myId); setTimeout(function(){ Observe.onNext('Observable... ' + myId); Observe.onCompleted(); }, 1000); }); var subscrition1 = source.subscribe(function onNext(x){ console.log('Observable 1: ' + x); }); var subscrition2 = source.subscribe(function onNext(x){ console.log('Observable 2: ' + x); });
Result:
/*"Observable 1: Observable 1" "Observable 2: Observable 2" "Observable 1: Observable... 1" "Observable 2: Observable... 2"*/
publish():
Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence.
console.clear(); var Observable = Rx.Observable; var _id = 1; var source = Observable.create(function(Observe){ var myId = _id++; Observe.onNext('Observable ' + myId); setTimeout(function(){ Observe.onNext('Observable... ' + myId); Observe.onCompleted(); }, 1000); }); var published = source.publish(); var subscrition1 = published.subscribe(function onNext(x){ console.log('Observable 1: ' + x); }); var subscrition2 = published.subscribe(function onNext(x){ console.log('Observable 2: ' + x); }); var connection = published.connect();
Results:
/* "Observable 1: Observable 1" "Observable 2: Observable 1" "Observable 1: Observable... 1" "Observable 2: Observable... 1" */
You can see the result just have one single subscrition then.
You can dispose the connection:
connection.dispose();
Results:
/*"Observable 1: Observable 1" "Observable 2: Observable 1"*/
There is a problem when you connect the published observables at different place.
var Observable = Rx.Observable; var _id = 1; var source = Observable.create(function(Observe){ var myId = _id++; Observe.onNext('Observable ' + myId); setTimeout(function(){ Observe.onNext('Observable... ' + myId); Observe.onCompleted(); }, 1000); }); var published = source.publish(); var connection = published.connect(); var subscrition1 = published.subscribe(function onNext(x){ console.log('Observable 1: ' + x); }); var subscrition2 = published.subscribe(function onNext(x){ console.log('Observable 2: ' + x); }); //var connection = published.connect();
Results:
/*"Observable 1: Observable... 1" "Observable 2: Observable... 1"*/
If we move the connect() funciton up before subscribe(). Then we missed the very first console.log(); It means connection is already start, but no one subscribe it yet.
Therefore, we don't use publish() funciton alone, more than often we use publish().refCount() function together.
相关文章推荐
- 转:JS在文本域鼠标指定位置插入文本-柯乐义
- js页面宽度获取
- 在网页上打印,js window.print
- BZOJ 2208: [Jsoi2010]连通数 tarjan bitset
- JS中<img><a>获取绝对路径
- 23、Javascript DOM
- 同页面多记录JS倒计时器
- 不使用Sencha Cmd,创建EXT-JS应用
- Newtonsoft.Json.JsonWriter
- 原生js实现autocomplete插件
- 在jsp页面上直接打开PDF文件
- jsch的简单使用
- extjs4 之单元格编辑 获取列对象
- JSON浅总
- JSON浅总
- Javascript实现幻灯片效果
- js贪吃蛇网页版游戏特效代码分享(挑战十关)
- js监听文本框变化事件
- Extjs4 之单元格编辑 获取列的对象
- C# XML与Json之间相互转换实例详解