Подписаться на все наблюдаемые в комбинатеПоследний - PullRequest
2 голосов
/ 23 сентября 2019

В моем коде я открываю matDialog, позволяющий извлекать XLSX.

При открытии этого matDialog данные загружаются в ngOnInit(), что может занять некоторое время.Вот почему я использую combineLatest() с filter(), что позволяет мне ждать результатов трех запросов, чтобы разрешить извлечение.Теперь я хотел бы добавить mat-progress-bar determinate, чтобы увидеть, куда идет добыча.Для этого я хотел бы иметь возможность изменять мою переменную progress с каждым полученным результатом.

Поэтому я использовал map(result => {this.progress = this.progress + 30;} в каждом запросе, чтобы увеличить прогресс.Это работает, но ломает мой combineLatest().Прогресс останавливается на 90%, и я не могу найти решение.

Код:

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

Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 23 сентября 2019

Эта строка:

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

будет принимать каждый результат и возвращать undefined , поскольку нет оператора return (следовательно, filter отфильтрует результаты, и подписчик выиграет 'Беги).Замените map на оператор tap, и он должен работать.

...