为什么 Observable 操作对每个订阅者调用一次(重复)?

Why are Observable operations called once (duplicated) for every subscriber?

每次我在 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 给你处理后的值而不用重新运行整个处理函数?

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

Cold observables start running upon subscription, i.e., the observable sequence only starts pushing values to the observers when Subscribe is called. Values are also not shared among subscribers ..

在您的情况下,您可以将 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();