getIds
возвращает массив идентификаторов, и вы хотите создать Observable (getNames
) для каждого идентификатора. Затем вы хотите упорядочить весь список имен вместе. Есть несколько способов сделать это, но я предложу один из них:
this.getIds().pipe(
/*
* mergeMap here will effectively flatten the inner Observable created by getNames.
* This means that the next operator will get the *result* of the getNames Observable
* rather than the Observable itself, so you don't need to subscribe to it explicitly.
*/
mergeMap(id => this.getNames(id)),
/*
* This is optional. `names` is an array. `mergeMap` over an array emits each array element
* individually. This simply flattens the collection of names arrays.
*/
mergeMap(names => names),
/**
* This is also optional. It will emit the entire collection of results as an array once
* all of the previous Observables have completed.
*/
toArray()
)
Вы можете подписаться на Observable, созданный этим, чтобы получить сплющенный список имен.
Я бы также предложил, чтобы, если это возможно, вы добавили в свою службу метод, который позволяет вам извлекать все имена, а не извлекать сначала список идентификаторов и каждое имя для каждого идентификатора в отдельности.