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

Sim*_*ias 5 javascript reactive-programming rxjs

每次调用.subscribe()Observable时,都会重新开始对每个值的处理(在下面的示例中,将为每个值调用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);
Run Code Online (Sandbox Code Playgroud)

有没有办法让订阅给你处理过的值而不重新运行整个处理函数?

xgr*_*mmx 4

嗨@Simon Boudrias,你应该了解冷观察与热观察

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

在你的情况下,你可以使用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();
Run Code Online (Sandbox Code Playgroud)