Угловой компонент не обновляет вид, как ожидалось

У меня небольшая проблема с компонентом, который не обновляется должным образом. Существует компонент, предоставляющий функцию publish. Эта функция вызывает generateDownload со списком объектов. Теперь getDrawing называется. Данные, возвращаемые sscmData.getDrawing, обновляют представление, и это работает как шарм.

export class DrawingComponent  {
    ...

    getDrawing(distance: DistanceSplit, reloadPredrawSkaters?: boolean): Observable<any> {

        return this.sscmData.getDrawing(distance.ID, distance.distance).pipe(
            map((response: Drawing) => {
                    ...
                    do some things
                    ...
            })
        )
    }

    publish(distances: DistanceSplit[]) {
        this.generateDownload(distances).subscribe(tabledata => {
            console.log(tabledata)
        })
    }

    generateDownload(list: DistanceSplit[]): Observable<any> {
        return from(list).pipe(
            concatMap((distance: DistanceSplit, index: number) => {
                return this.getDrawing(distance).pipe(
                    tap(() => {
                        this.changeDetectorRef.detectChanges();
                        console.log(this.propress);
                        this.propress++;
                    }),
                    map(res => {
                        let tabledata = ...
                        return tabledata;
                    })
                );
            })
        );
    }
}

Моя проблема propress, это простая переменная, и я хочу видеть в представлении компонента текущее значение {{ propress }}. Но значение отображается только тогда, когда наблюдаемое полностью обработано. Таким образом, он всегда показывает длину списка, но не текущее значение.

Я ожидал увидеть возрастающее значение, например. 1...2...3...4... и т.д. Как заставить его работать?


person Lars    schedule 20.08.2020    source источник
comment
Я воспроизвел ваш код здесь: stackblitz.com/ edit/so-propress?file=src/app/hello.component.ts и работает так, как вы описали. Кстати, вам не нужно вызывать detectChanges, если вы не используете обнаружение изменений onPush, и даже если вы используете, есть лучшие способы сделать это.   -  person wlf    schedule 20.08.2020
comment
@wlf detectChangesбыл просто отчаянной попыткой заставить его работать... Код выглядит точно так же, как мой, но в моей среде он не будет работать :-(   -  person Lars    schedule 20.08.2020
comment
В вашем случае, если вы отправите массив из 4 расстояний, будет ли число прогресса идти прямо к 4? Тогда, если вы дадите массив из 3 расстояний, он подскочит до 7? Что такое console.log внутри вывода tap? порядковые номера или прыжки как значения в html?   -  person wlf    schedule 20.08.2020
comment
@wlf вывод консоли показывает порядковые номера   -  person Lars    schedule 20.08.2020
comment
Возможно, ответы возвращаются так быстро, что вы не видите промежуточных чисел в html. Попробуйте добавить delay в getDrawing, как в stackblitz, чтобы проверить это.   -  person wlf    schedule 20.08.2020
comment
@wlf the delay дайте решение. Без delay представление переходит от 0 к концу. Кроме того, я использовал mergeMap вместо concatMap, как вы. Теперь вроде работает :-) Большое спасибо!   -  person Lars    schedule 20.08.2020
comment
@wlf delay также можно установить на 0, но его нужно установить ... странно   -  person Lars    schedule 20.08.2020