Несколько запросов HTTP в одном методе flatMap - PullRequest
0 голосов
/ 24 января 2019

После некоторых исследований я обнаружил, что лучший способ сделать несколько запросов в Rxjs - это flatMap (). Тем не менее, я не могу заставить его работать, когда есть несколько запросов внутри метода flatMap (). Вывод функции subscribe () является наблюдаемым вместо значений.

this.companyService.getSuggestions(reference)
    .pipe(
        flatMap((suggestions: string[]) => {
            let infos = [];
            suggestions.forEach(suggestion => {
                infos.push(this.companyService.getInformation(suggestion));
            }); 
            return of(infos);
        }),
    ).subscribe((val) => {
        console.log('subscribe', val); //Output here is array of observables instead of values
    });

1 Ответ

0 голосов
/ 24 января 2019

flatMap будет ожидать только одно значение.

Я бы преобразовал строку предложений [] в поток и сделал бы flatMap поверх этого.

import { flatMap, from } 'rxjs/operators'

const suggestionsRequest$ = this.companyService.getSuggestions(reference)

// convert to suggestion stream
const suggestions$ = suggestionsRequest$.pipe(
  flatMap((suggestions: string[]) => from(suggestions))
)

// get all infos
const infos$ = suggestions$.pipe(
  flatMap((suggestion: string) => this.companyService.getInformation(suggestion))
)

...