Мне нужно сделать два вызова Firebase (так как он не поддерживает запросы OR) и объединить вывод в один массив в конце, чтобы вернуться к вызывающей службе.
У меня есть кое-что, что получается довольно закрыть, но выводит двумерный массив массивов (по одному на каждый вызов Firebase). Я попробовал несколько вещей, и это лучшее, что я могу сделать. Любая помощь по приведению в порядок ниже будет здорово.
getAllFriends(): Observable<[Friendship[], Friendship[]]> {
const invitesSent = from(this.afAuth.currentUser.then(user => {
return user.uid;
}))
.pipe(
switchMap(
userid => {
return this.db.collection('friendships', ref => ref.where('inviter', '==', userid)).snapshotChanges().pipe(map(actions => {
return actions.map(action => {
const data = new Friendship(action.payload.doc.data());
data.id = action.payload.doc.id;
console.log(data);
return data;
});
}));
}
)
);
const invitesReceived = from(this.afAuth.currentUser.then(user => {
return user.uid;
}))
.pipe(
switchMap(
userid => {
return this.db.collection('friendships', ref => ref.where('invitee', '==', userid)).snapshotChanges().pipe(map(actions => {
return actions.map(action => {
const data = new Friendship(action.payload.doc.data());
data.id = action.payload.doc.id;
console.log(data);
return data;
});
}));
}
)
);
return combineLatest([invitesSent, invitesReceived]);
}
Friendship
- это просто объект со свойствами: пары значений, ничего особенного.
Я попытался затем положить .pipe () после этого возвращается наблюдаемым, но это просто останавливает срабатывание подписки в вызывающей службе.