2

$createObservableFunction メソッドを使用してオブザーバブルを作成し、そのオブザーバブルを複数回サブスクライブするとします。最後のサブスクライバーは、他のサブスクライバーをオーバーライドします。

ただし、 rx.Observable.interval() でオブザーバブルを作成し、それを複数回サブスクライブするとします。両方のサブスクライバーが間隔で起動します。

なんで?さらに重要なのは、$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');
  });


});

問題を説明するプランカーの例。http://plnkr.co/edit/kXa2ol?p=preview

4

1 に答える 1

1

オブザーバーを共有する必要があります。このプランカーをチェックしてください: 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/

于 2015-09-15T22:16:19.143 に答える