$ createObservableFunction订阅服务器被覆盖

时间:2014-10-30 22:54:37

标签: angularjs rxjs reactive-extensions-js

如果我使用$ 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

1 个答案:

答案 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/