【问题标题】:Why are Observable operations called once (duplicated) for every subscriber?为什么每个订阅者都调用一次(重复)Observable 操作?
【发布时间】:2015-09-14 01:39:06
【问题描述】:

每次我在 Observable 上调用 .subscribe() 时,都会重新开始对每个值的处理(在下面的示例中,map 函数将为每个值调用两次)。

var rx = require('rx-lite');
var _ = require('lodash');

var obs = rx.Observable.fromArray([1, 2]);

var processing = obs.map(function (number) {
  // This function is called twice
  console.log('call for ' + number);
  return number + 1;
});

processing.subscribe(_.noop, _.noop);
processing.subscribe(_.noop, _.noop);

有没有办法让 subscribe 为您提供处理后的值,而无需重新运行整个处理函数?

【问题讨论】:

    标签: javascript reactive-programming rxjs


    【解决方案1】:

    嗨@Simon Boudrias 你应该知道Cold vs. Hot Observables

    Cold observables 在订阅时开始运行,即,observable 序列仅在调用订阅时才开始将值推送给观察者。 订阅者之间也不共享值 ..

    在您的情况下,您可以将publishconnectrefCount 一起使用

    var rx = require('rx-lite');
    var _ = require('lodash');
    
    var obs = rx.Observable.fromArray([1, 2]);
    
    var processing = obs.map(function (number) {
      // This function is called twice
      console.log('call for ' + number);
      return number + 1;
    }).publish();
    
    processing.subscribe(_.noop, _.noop);
    processing.subscribe(_.noop, _.noop);
    
    processing.connect();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      相关资源
      最近更新 更多