Вы должны использовать forkJoin RxJS, чтобы дождаться завершения цикла for..of перед возвратом всех наблюдаемых.
Вот изменения, которые вы должны внести в свой код:
getPersons().subscribe(
persons => {
const observablesList = [];
for (const person of persons) {
const getAddressObservable = getAddress(person.id);
observablesList.push(getAddressObservable)
}
forkJoin(observablesList).subscribe(response => {
// console.log(response) to check that there is a list of returned observables
const result = persons.map((person, index) => {
person['address'] = response[index]['address'];
return person;
})
doSomethingWithAddresses();
})
}
);
В качестве альтернативы, вы можете попробовать это, чтобы предотвратить цепочку subscribe()
getPersons().pipe(
mergeMap(persons => {
const observablesList = [];
for (const person of persons) {
const getAddressObservable = getAddress(person.id);
observablesList.push(getAddressObservable)
}
return observablesList;
})
).subscribe(response => {
// console.log(response) to check that there is a list of returned observables
const result = persons.map((person, index) => {
person['address'] = response[index]['address'];
return person;
})
doSomethingWithAddresses();
})