Вы смешиваете асинхронный код с синхронным кодом. Ваш метод вызывает orgsArr.push
из наблюдаемого .map
вызова, который не будет выполнен к тому времени, как вы вернете Observable.of(orgsArr)
Вы также неправильно используете карту на organizations.map
, так как карта предназначена для возврата чего-либо и создает массив.
Вы можете перефакторизовать это, чтобы использовать concat
со всеми данными Observable, возвращаемыми из сопоставленных организаций valueChanges()
, а затем reduce
для преобразования потока значений в один массив:
const orgValueObsArray = organizations.map(orgid => {
return this.afs.collection('users').doc<Organization>(orgid).valueChanges();
});
return Observable.concat(...orgValueObsArray)
.reduce((acc, val) => {
acc.push(val);
return acc;
}, []);