forkJoin或zip(或其他函数)列表,带有某种进度的可观察对象

时间:2019-05-14 21:05:37

标签: rxjs

是否有一种方法可以收集可观察对象的列表,以获得forkJoinzip那样的累积结果,但是在完成时会有所进展? 例如,加入一个类似的http请求列表,但在访问过程中可视化进度。

2 个答案:

答案 0 :(得分:0)

这里是您计算每个可观察项目完成时的百分比的方法。 merge将使Obs异步运行,scan将进行计数并发送到map以锻炼百分比

obs=[ob1,ob2,ob3]
merge(...obs).pipe(
  scan((acc,curr)=>acc+1,0),
  map(count=>count/obs.length*100)
)

答案 1 :(得分:0)

另一种可能性:

$sql = "SELECT b.year_name as year, SUM(a.status=1) as total 
        from tbl_student as a 
        left join tbl_year as b on b.id_year=a.year
        GROUP BY a.tbl_year 
        ORDER BY year ASC" ;

用法:

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$};