如果我使用$ createObservableFunction方法创建一个observable,并且我多次订阅了这个observable。最后一个订户覆盖任何其他订户。
但是,如果我用rx.Observable.interval()创建一个observable并多次订阅它。订阅者都会在这段时间内开火。
为什么呢?更重要的是,如何让$ createObservableFunction触发两个订阅者。
app.controller('MainCtrl', function($scope, rx) {
var test = $scope.$createObservableFunction('testClick');
var test2 = rx.Observable.interval(3000);
test.subscribe(function(){
console.log('I never run, why?');
});
test.subscribe(function(){
console.log('Why am I overriding the above subscribe');
});
test2.subscribe(function(){
console.log('This observable runs both subscribed functions')
});
test2.subscribe(function(){
console.log('See this gets called and so does the above');
});
});
说明问题的示例plunker。 http://plnkr.co/edit/kXa2ol?p=preview
答案 0 :(得分:1)
你必须分享观察者。看看这个plunker:http://plnkr.co/edit/4cVzpNVAel2Izcqg60Ci
它与您的代码完全相同,但上面有.share()。
var test = $scope.$createObservableFunction('testClick').share();
我并不完全理解冷热观察者之间的区别,但基本上,当你分享它时,你会让观察者变得热烈。这篇文章有点让我理解得更好:http://jaredforsyth.com/2015/03/06/visualizing-reactive-streams-hot-and-cold/和一个允许您查看代码的网络应用程序,与文章显示的方式相同:http://jaredforsyth.com/rxvision/examples/playground/