Я пытаюсь создать облачную функцию Google, которая читает коллекцию документов Firestore и выполняет действие с этими документами.Эти документы должны быть прочитаны один раз и сохранены в массиве для сокращения необходимых операций чтения.Но я не могу сделать это правильно, чтобы итерация по моему массиву начиналась после окончания чтения.
export const matchUsers = functions
.region("europe-west1")
.pubsub
.topic("matchUsers")
.onPublish(async message => {
console.log("Matching invoked...")
await firebase.firestore().collection("matchData").listDocuments().then(docRefs => {
const docs: admin.firestore.DocumentData[] = []
docRefs.forEach(async docRef => {
await docRef.get().then(snapshot => {
const data = snapshot.data()
if (data) {
console.log("BPM: " + data.bpm) # gets called
docs.push(data)
}
})
})
console.log("Start loop")
docs.forEach(doc => {
console.log("BPM: " + doc.bpm) # never gets called
})
console.log("Finish loop")
})
});
Вывод:
Matching invoked...
Start loop
Finish loop
BPM: 120
Я ожидаю, что вывод будет таким: Вывод:
Matching invoked...
BPM: 120
Start loop
BPM: 120
Finish loop