RxJS:forkJoin合并映射
我试图发出多个http请求,并在一个对象中获取返回的数据RxJS:forkJoin合并映射,rxjs,Rxjs,我试图发出多个http请求,并在一个对象中获取返回的数据 const pagesToFetch = [2,3] const request$ = forkJoin( from(pagesToFetch) .pipe( mergeMap(page => this.mockRemoteData(page)), ) ) mockRemoteData()返回一个简单的承诺。 在第一次可观察到的发射(从pagesToFetch请求$的第一个条目创建的一次)完成后,不
const pagesToFetch = [2,3]
const request$ = forkJoin(
from(pagesToFetch)
.pipe(
mergeMap(page => this.mockRemoteData(page)),
)
)
mockRemoteData()返回一个简单的承诺。
在第一次可观察到的发射(从pagesToFetch请求$的第一个条目创建的一次)完成后,不包括中的第二个值。如何解决此问题?尝试以下示例格式
Observable.forkJoin(
URL 1,
URL 2
).subscribe((responses) => {
console.log(responses[0]);
console.log(responses[1]);
},
error => {console.log(error)}
);
您可以将
pagesToFetch
中的每个值转换为可观察值,然后等待它们全部完成:
const observables = pagesToFetch.map(page => this.mockRemoteData(page));
forkJoin(observables)
.subscribe(...);
或者,如果不是那么简单,您需要pagesToFetch
作为一个可观察对象来收集URL,您可以使用以下示例:
from(pagesToFetch)
.pipe(
toArray(),
mergeMap(pages => {
const observables = pages.map(page => this.mockRemoteData(page));
return forkJoin(observables);
}),
)
.subscribe(...);
没错,我去掉了mergeMap,它开始工作了,谢谢