Как ждать forEach с rxjs и возвращать значение? - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь дождаться результата forEach() с forkJoin и отправить результат обратно. Но я терплю неудачу. Я пытаюсь сделать что-то вроде этого:

publish() {
    this.generateDownload().subscribe(response => {
        console.log(response)
    })
)

generateDownload(): Observable<any> {
    let obs = [];

    this.objectlist.forEach(distance => {
        obs.push(
            this.initializeDistance(distance).pipe(map(() => {
                return ExcelExport.convertHTML2data(distance);
            }))
        );
    });

    return forkJoin(obs);
}

Функция initializeDistance(...) возвращает наблюдаемое значение ExcelExport.convertHTML2data - это «нормальная» функция, которая возвращает массив данных.

Сейчас я пытаюсь дождаться, пока initializeDistance вернет значение. Но происходит то, что forEach запускается и также возвращает массив с результатами в generateDownload, но элементы массива равны. Я мог бы понять, что forkJoin не ждет, пока initializeDistance не закончится.

Но что я могу сделать, чтобы решить мою проблему? Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 01 июля 2019

Вам следует преобразовать ваш массив данных в массив Observable и вернуть forkJoin этих наблюдаемых.

generateDownload(): Observable<any> {
        const obs = this.objectlist.map(distance => {
            return this.initializeDistance(distance).pipe(map(() => {
                    return ExcelExport.convertHTML2data(distance);
                }));
        });

    return forkJoin(...obs);

    }
...