RxJs map函数导致上游observable被多次调用

时间:2018-03-10 10:47:05

标签: 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}#`);

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

我用Google搜索,似乎share可能是解决方案,但我并不了解它的位置以及为什么

1 个答案:

答案 0 :(得分:0)

我设法通过执行

删除多个调用
const httpResultStream = combinedTriggerStream
   .switchMap(v => simulateHttp('http ' + v, 3000))
   .share(); 

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

此外,我发现这篇文章非常有用,即使它与我的问题https://blog.angular-university.io/rxjs-switchmap-operator/

无关。