RxJs map函数导致上游observable被多次调用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxJs map函数导致上游observable被多次调用相关的知识,希望对你有一定的参考价值。
我对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
可能是解决方案,但我不够精通,无法理解在哪里放以及为什么。
答案
我设法通过执行删除多个调用
const httpResultStream = combinedTriggerStream
.switchMap(v => simulateHttp('http ' + v, 3000))
.share();
仍不确定为什么我需要这个。
此外,我发现这篇文章非常有用,即使它不属于我的问题https://blog.angular-university.io/rxjs-switchmap-operator/
以上是关于RxJs map函数导致上游observable被多次调用的主要内容,如果未能解决你的问题,请参考以下文章
rxjs里的Observable对象subscribe方法的执行原理