Я использую node.js для получения данных из 2 разных коллекций в Firestore.
Эта проблема похожа на эту, но на этот вопрос нет ответа: Nested Firebase Firestore forEach обещаниезапросы
В моем случае я создаю приложение в стиле Instagram, в котором у меня есть коллекция временных шкал.Внутри документа временной шкалы у меня есть ключ пользователя.Из этого пользовательского ключа я бы хотел выполнить другой запрос из коллекции 'user'.
Итак, логически здесь приведены шаги запроса:
- Получить данные временной шкалы (в массиве), которыесодержит ключ пользователя.
- Используя этот ключ пользователя, получить пользовательские данные (отдельные данные)
- Возвращать JSON-ответ клиенту.
Проблема в том, что JSON-ответвозвращается до получения пользовательских данных.
Это мой код:
tlRoute.get((req,res)=>{
//reading from firestore
let afs = req.app.get('afs');
var timelineArr = [];
let timelineRef = afs.collection(`timeline/${req.params.key}/timeline`);
timelineRef.get().then((snapshot) => {
snapshot.forEach((doc) => {
if(!doc.exists){
console.log('No such document!');
} else {
//populating timelineData with doc.data()
console.log('populating timelineData');
let timelineData = doc.data();
let userRef = afs.doc(`user/${doc.data().userKey}`);
userRef.get().then((doc) => {
//adding user details to timelineData
console.log('adding user details to timelineData');
timelineData.profileImageUrl = doc.data().profileImageUrl;
timelineData.username = doc.data().username;
timelineArr.push(timelineData);
});
}
});
})
.catch(err => {
console.log(err);
});
console.log('this is the final timelineArr', timelineArr);
//returning response json data to client
return res.json(timelineArr);
});
В журнале консоли это журнал, который я получаю:
this is the final timelineArr []
populating timelineData
populating timelineData
adding user details to timelineData
adding user details to timelineData
Любая помощьбыл бы признателен.