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

标签 javascript reactive-programming rxjs

每次我在 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);

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

最佳答案

嗨@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();

关于javascript - 为什么 Observable 操作对每个订阅者调用一次(重复)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32556231/

相关文章:

javascript - OwlCarousel2 初始化多个实例的最佳方式是什么

javascript - (aws-amplify) 为什么只有在上传完成后才执行progressCallback?

javascript - RxJS 中的 Rx.Observable.ForkJoin 和并行异步(使用 X-Ray)

javascript - rxjs observable.pipe(take(1)) vs toPromise

javascript - 高度 : auto calculating incorrectly if element is hidden when dom loads, 然后稍后显示

javascript - AngularJS 对单个元素进行多重验证以及无需验证

Rxjs - 如何提取数组中的多个值并将它们同步反馈给可观察流

messaging - 如何在基于事件、消息驱动的微服务架构中在故障场景中恢复状态

c# - 如何获取 N 个热 Observable<decimal> 实例的 "last"项的总和?

Angular 4 服务方法总是返回未定义而不是 Observable