angular - Prenumerera på alla observabler i en combineLatest


I min kod öppnar jag en matDialog som tillåter XLSX-extraktion.

När jag öppnar denna matDialog laddas data in i ngOnInit(), vilket kan ta lite tid. Det är därför jag använder combineLatest() tillsammans med filter() som gör att jag kan vänta på resultatet av de tre frågorna för att tillåta extraktion. Jag skulle nu vilja lägga till en mat-progress-bar determinate för att se hur extraktionen går. För det skulle jag vilja kunna ändra min variabel progress med varje mottaget resultat.

Så jag använde map(result => {this.progress=this.progress + 30;} på varje förfrågan för att öka framstegen. Det fungerar, men bryter min combineLatest(). Framstegen stannar vid 90% och jag kan inte hitta en lösning.

Kod:

this.subscriptions$.add(combineLatest([
    this.storeWallets.loadInvoiceExtractionProduct(this.selectedWallet).pipe(
        //map(result => { this.progress = this.progress + 30; }),
        catchError(err => {
            console.error(err.message);
            return of(err);
        })
    ),
    this.storeWallets.loadInvoiceExtractionSupport(this.selectedWallet).pipe(
        //map(result => { this.progress = this.progress + 30; }),
        catchError(err => {
            console.error(err.message);
            return of(err);
        })
    ),
    this.storeWallets.loadInvoiceExtractionTraining(this.selectedWallet).pipe(
        //map(result => { this.progress = this.progress + 30; }),
        catchError(err => {
            console.error(err.message);
            return of(err);
        })
    ),
    ]).pipe(
        filter(results => results.every(res => !!res))
    ).subscribe(results => {
        //this.progress = 100;
        document.body.style.cursor = "default";
        this.waitExtraction = false;
    })
);

Tack för din hjälp.

Svar #1

Den här raden:

map(result => { this.progress = this.progress + 30; }),

kommer att ta varje resultat och returnera undefined, eftersom det inte finns något return-uttryck (därför kommer filter att filtrera bort resultaten, och prenumeranten kommer inte att köras). Byt ut map mot tap-operatören så borde det fungera.