如何使用具有多个映射的相同observable?

时间:2017-10-26 21:56:06

标签: angular rxjs angular-httpclient subject-observer

我的代码有一个_.range(),当添加新值时会触发一个返回Subject的HTTP请求。

我想以两种不同的方式处理这些数据(使用相同的数据),并使用存储在ObservableObservables中的结果group作为值{{1}使用times管道。

虽然这确实有效,但HTTP请求会多次发送 - 我只希望每次订阅都发送一次。

以下是一个最小的例子。

ngFor

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

您可以使用share运算符存档您要查找的内容:

import 'rxjs/add/operator/share';

ngOnInit() {

  var selections = new Subject<string>();

  var appointments = selections
    // exampleService.getData returns an HTTP observable.
    .switchMap(date => this.exampleService.getData(date))
    .share();

  var group = appointments
    .map(data => this.process(data));

  var times = appointments
    .map(data => this.calculateTimes(data));

  // Calling subscribe each time sends the HTTP request multiple
  // times - I only want it to be send once for both of them: they
  // can share the data!!
  group.subscribe();
  times.subscribe();

  // selections.next(someData) is called periodically from some
  // omitted code.
}

基本上,不同的observers在其中共享相同的source

有关运营商here的更多信息。