如果您只想得到一个可观察的,最好使用
pipe
和
switchMap
,而不是订阅它。我也用过
tap
和
finalize
跟踪进度。
import { forkJoin, of, throwError } from 'rxjs';
import { delay, tap, switchMap, finalize } from 'rxjs/operators';
function loadPagesInfo() {
return of({
pageCount: 3
}).pipe(
delay(1000)
);
}
function loadPage(pageIndex) {
return of({
pageIndex: 1
}).pipe(
delay(1000)
);
}
function loadPages() {
return loadPagesInfo().pipe(
tap(()=> {
console.log("loading start");
}),
switchMap(pagesInfo => {
return forkJoin(
new Array(pagesInfo.pageCount)
.fill(0)
.map((_, pageIndex) => loadPage(pageIndex))
)
}),
finalize(() => {
console.log("loading end");
})
);
}
loadPages().subscribe(result => {
console.log(`result: ${result}`);
});
StackBlitz