我对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
可能是解决方案,但我并不了解它的位置以及为什么。
答案 0 :(得分:0)
我设法通过执行
删除多个调用const httpResultStream = combinedTriggerStream
.switchMap(v => simulateHttp('http ' + v, 3000))
.share();
仍然不确定为什么我需要这个。
此外,我发现这篇文章非常有用,即使它与我的问题https://blog.angular-university.io/rxjs-switchmap-operator/
无关。