Возврат Наблюдаемый после подписки - PullRequest
0 голосов
/ 13 мая 2018
const orgsArr = [];
organizations.map(orgid => {
        this.afs.collection('users').doc<Organization>(orgid).valueChanges()
            .map(x => {
               orgsArr.push(x);
            }).subscribe();
});
return Observable.of(orgsArr);

orgsArr перезапускается перед подпиской ()

1 Ответ

0 голосов
/ 14 мая 2018

Вы смешиваете асинхронный код с синхронным кодом. Ваш метод вызывает 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; 
    }, []);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...