javascript - RxJs map函数导致upstream observable被多次调用

标签 javascript angular rxjs rxjs5

我对 RxJS 有点陌生,并且在 Observable 上使用 map 时遇到问题,这导致上游 Observable 被多次调用(即 HTTP 请求)。

我有以下示例:

https://stackblitz.com/edit/angular-rxjs-playground-uxygsb?file=app%2Fapp.component.ts

主要内容如下

function simulateHttp(val: any, delay:number) {
    return Observable.of(val)
        .delay(delay);
}

function timeLog(msg) {
    console.log(`${new Date().toISOString()}:  ${msg}`);   
}

const timerStream: Observable<number> = IntervalObservable
  .create(8000)
const manualRefreshStream = new Subject<any>();
const combinedTriggerStream: Observable<any> = Observable.merge(timerStream, manualRefreshStream);

const httpResultStream = combinedTriggerStream.switchMap(v => {
  return simulateHttp('http ' + v, 3000);
});
const dataStream = httpResultStream
  .map(v => `*${v}*`)
  .map(v => `#${v}#`);

基本上,只要我通过 httpResult 流上的 map 进行转换,我就会多次调用 simulateHttp 方法。

我四处搜索,似乎 share 可能是解决方案,但我不太了解把它放在哪里以及为什么

最佳答案

我设法通过执行删除了多个调用

const httpResultStream = combinedTriggerStream
   .switchMap(v => simulateHttp('http ' + v, 3000))
   .share(); 

仍然不确定我为什么需要这个。

我还发现这篇文章很有帮助,尽管它与我的问题无关 https://blog.angular-university.io/rxjs-switchmap-operator/

关于javascript - RxJs map函数导致upstream observable被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49208171/

相关文章:

javascript - 如何动态地将高度添加到包含响应图像的 div

javascript - 这两个代码块之间的差异

javascript - 使用 RxJS 5 可观察对象的延迟模式

pagination - RxJs可观察到的分页

javascript - AngularJS 范围 $id 的值是如何设置的?似乎没有增量。

javascript - 使 gulpfile : getting an error when call gulp. 并行

html - ngFor angular 2+ 内部的 ngSwitch

javascript - 可观察到返回错误,但请求数据正常返回

javascript - 返回按钮在同一页面上创建多个组件

javascript - Angular 动画查询错误地返回零元素