forkJoin или zip (или, может быть, какая-то другая функция) список наблюдаемых с некоторым прогрессом - PullRequest
0 голосов
/ 15 мая 2019

Есть ли способ собрать список наблюдаемых вместе, чтобы получить кумулятивный результат, как forkJoin или zip, но получить какой-то прогресс, пока они заканчивают? Например, присоединитесь к списку похожих http-запросов, но визуализируйте ход их выполнения.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Вот как вы рассчитываете процент по мере выполнения каждого из наблюдаемых. merge позволит obs работать асинхронно, scan возьмет счет и отправит map для тренировки процента

obs=[ob1,ob2,ob3]
merge(...obs).pipe(
  scan((acc,curr)=>acc+1,0),
  map(count=>count/obs.length*100)
)
0 голосов
/ 15 мая 2019

Еще одна возможность:

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()
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...