Еще одна возможность:
function get_result_and_perceptage(obs)
const counter$ = new Subject();
obs_modified_list = obs.map(item => item.pipe(finalize(
() => counter$.next(1)
))
const result$ = forkJoin(obs_modified_list).pipe(finalize(
() => counter$.complete()
));
const percent$ = counter$.asObservable().pipe(map((val)=>count *100/obs.length));
return {result$, percent$};
Использование:
obs=[ob1,ob2,ob3]; // netwofk calls oservables
const {result$, percent$} = get_result_and_perceptage(obs)
result$.subscribe((resData)=>handleData(resData))
percent$.subscribe(
(percentValue) =>showItSomethere(percentValue),
null,
doSomethingWhenIsDone()
)