Должно работать следующее (не проверено):
export default (req, res) => {
firestore
.collection("category-filters")
.where(req.query.categoryKey, "==", true)
.get()
.then(querySnapshot => {
const promises = [];
const paymentAccountsRef = firestore.collection("payment-accounts");
querySnapshot.docs.map(doc => {
promises.push(paymentAccountsRef.doc(doc.id).get());
});
return Promise.all(promises);
})
.then(paymentAccountsSnapshotsArray => {
const promises = [];
const professionalProfilesRef = firestore.collection("professional-profiles");
paymentAccountsSnapshotsArray.forEach(snap => {
if (snap.data().creditAmount > 0) {
promises.push(professionalProfilesRef.doc(snap.id).get());
}
});
return Promise.all(promises);
})
.then(professionalProfileSnapshotsArray => {
const results = [];
professionalProfileSnapshotsArray.forEach(snap => {
results.push({ id: snap.id, ...snap.data() });
});
res.json({ results });
})
};
Вам необходимо управлять параллельными выборками документов с помощью Promise.all()
и связывать различные Обещания, возвращаемые Promise.all()
, в порядке отправлять ответ только тогда, когда все эти асинхронные операции завершены. В вашем текущем коде вы отправляете ответ до того, как эти асинхронные операции завершены.
Кроме того, вам может потребоваться точная настройка этого кода, чтобы проверить, что различные снимки Массивы не пусты. Эта часть зависит от вас!