С моим текущим кодом batch.commit () запускается до того, как большинство документов было добавлено в пакет.Как я могу связать свои обещания так, чтобы я мог получить документы из вложенной коллекции, и ТОГДА добавить ее в пакет, и ТО после того, как все вложенные коллекции были обработаны, зафиксировать пакет.
exports.syncUserDetailsWithFriends = functions.firestore
.document('users/{userId}')
.onUpdate(change => {
const newUserData = change.after.data();
let usersRef = admin.firestore().collection('users')
let batch = admin.firestore().batch();
usersRef.get()
.then(users => {
users.forEach(userDoc => {
let friendsRef = usersRef.doc(userDoc.id).collection('friends')
friendsRef.get()
.then(friends => {
friends.forEach(friend => {
if (friend.id == newUserData.id) {
batch.update(friendsRef.doc(friend.id), newUserData)
}
})
})
})
}).then(batch.commit().catch(error => console.error(error)))
});