#javascript #google-cloud-firestore
# #javascript #google-cloud-firestore
Вопрос:
Я пытаюсь получить все данные из справочного списка ‘anunturi_postate’. Переменная ‘post_data’, добавленная в список, выглядит нормально в цикле, но вне цикла список пуст.
Я добавил изображение из консоли и эмулятора firestore для лучшего представления о том, что я пытаюсь сделать.
// db = firebase.firestore()
async function postedByUser(){
let query = await db.collection("users").doc($current_user.uid).get()
let user_posts = []
// anunturi_postate it's a field name which holds an array
await query.data().anunturi_postate.forEach(async (doc) => {
let post = await db.doc(doc.path).get()
let post_data = await post.data()
console.log(post_data) // data looks ok
user_posts.push(post_data)
})
console.log("user_posts:", user_posts) // here it's empty
return user_posts
}
let user_posts
postedByUser().then(data => {
user_posts = data
})
// here it's empty
console.log("After func call: ", user_posts)
Ответ №1:
async / await не работает внутри цикла forEach так, как вы ожидаете. Цикл не возвращает обещание, которое вы можете ожидать, и не завершится, прежде чем перейти к следующему коду. Вместо этого используйте цикл for. Кроме того, вы можете использовать каждую ссылку, как если бы это был объект DocumentReference.
let user_posts = []
const array = query.data().anunturi_postate
for (let ref of array) {
let post = await ref.get()
let post_data = await post.data()
console.log(post_data) // ok
user_posts.push(post_data)
})
console.log("user_posts:", user_posts)