Как получить reportProgress нескольких наблюдаемых, сгруппированных в forkJoin? - PullRequest
0 голосов
/ 29 апреля 2020

В моем проекте Angular есть форма для загрузки нескольких файлов (каждый может быть большим, и я не могу сделать только один POST со всеми файлами из-за предельного размера POST сервера).

It было бы неплохо, если бы я мог иметь индикатор выполнения, определяемый Материалом для каждого процесса, чтобы показать прогрессию.

let tabObservable:Array<Observable<any>> = [];

tabObservable.push( this.rfs.myPost('receive.php', formData1, {reportProgress : true, observe: "events"}) );
tabObservable.push( this.rfs.myPost('receive.php', formData2, {reportProgress : true, observe: "events"}) );
tabObservable.push( this.rfs.myPost('receive.php', formData3, {reportProgress : true, observe: "events"}) );
....

uploadAll = forkJoin( tabObservable );
upload().subscribe( 
    (event)=>{ 
          // contains httpReponses at the end of the forkJoin but nothing about progression...
    }, 
    (err)=>{ }
);

Возможно ли это? Нужно ли ловить «события» каждого наблюдаемого?

1 Ответ

1 голос
/ 29 апреля 2020

Вы можете преобразовать наблюдаемые, добавив трубу, например:

forkJoin(tabObservable.map(o => o.pipe(tap(() => this.count++))))
    .subscribe();

Функция касания может быть пользовательской функцией для обновления индикатора выполнения
Ну, счет идет очень неровно ездить, но это одно решение

См. стек стека

...