Как обрабатывать внутренние наблюдаемые? - PullRequest
0 голосов
/ 30 мая 2020

В моем приложении Angular это массив recordlist. Этот массив содержит другие массивы объектов. Сейчас я пытаюсь обработать http.post (через функцию) для каждого вложенного элемента в массиве recordlist.

this.recordlist - это Observable, который работает и отображается как таблица в моем приложении.

/**
 *
 */
save() {
    this.recordlist
        .pipe(
            mergeMap((response: any) => response.flat()),
            map((response: any) => {
                console.log('---', response);
                return this.skaterService.setSkaterSeasonBestTimes(response);
            })
        )
        .subscribe(
            response => {},
            error => {},
            () => {
                console.log('.....done');
            }
        );
    }

/**
 *
 */
setSkaterSeasonBestTimes(value: SkaterBesttime): Observable<any> {
    return this.restService.post('/skater/besttimes', value).pipe(
        map((response: any) => {
            console.log('+++', response);
            return new SkaterBesttime(response, true);
        })
    );
}

Проблема теперь в том, что внутренний setSkaterSeasonBestTimes(...) не обрабатывается. Я надеюсь, что кто-нибудь может дать мне полезный совет и решение.

Ответы [ 2 ]

2 голосов
/ 30 мая 2020

Изменен способ сохранения: -

save() {
    this.recordlist
        .pipe(
            mergeMap((response: any) => {
                let res = response.flat().map((item) => this.setSkaterSeasonBestTimes(item));
                return forkJoin(res);
            })
        )
        .subscribe(
            response => {},
            error => {},
            () => {
                console.log('.....done');
            }
        );
    }
1 голос
/ 30 мая 2020

Вы поменяли местами свою карту и mergeMap.

Попробуйте следующее:

/**
 *
 */
save() {
    this.recordlist
        .pipe(
            map((response: any) => response.flat()),
            mergeMap((response: any) => {
                console.log('---', response);
                return this.skaterService.setSkaterSeasonBestTimes(response);
            })
        )
        .subscribe(
            response => {},
            error => {},
            () => {
                console.log('.....done');
            }
        );
    }

/**
 *
 */
setSkaterSeasonBestTimes(value: SkaterBesttime): Observable<any> {
    return this.restService.post('/skater/besttimes', value).pipe(
        map((response: any) => {
            console.log('+++', response);
            return new SkaterBesttime(response, true);
        })
    );
}

mergeMap необходимо вернуть Observable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...