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

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

本文关键字:重复 一次 观察 操作 为什么 调用      更新时间:2023-09-26

每次在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你应该了解冷与热观测。

冷可观察对象在订阅时开始运行,也就是说,可观察对象序列只有在调用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();