Очень новое ожидание / asyn c pattren в облачных функциях. Имейте облачные функции, которые выбирают данные из документа, который имеет массив DocumentReferences
/* Create new Chilla for a given date */
exports.createNewSalikChilla = functions.https.onRequest(async (req, res) => {
const email=req.body.email;
const date=req.body.date;
console.log('Creating chilla for Salik <' + email + '> on <' + date + '>');
const db = admin.firestore();
const habits = [];
const salikRef = db.collection('saliks').doc(email);
const salik = await salikRef.get();
if (!salik.exists) {
throw new Error("Salik not found for <" + email + ">");
}
const assignedHabits = salik.data()['assigned_habits'];
assignedHabits.forEach(element => {
//LOST on how to get these Document Reference and push to habits = []
});
res.send({status: "Success"});
});
Документ в коллекции saliks имеет следующую структуру в firestore
assigned_habits<array>:
0:
habit<reference>: /habits/first
required<number>: 200
1:
habit<reference>: /habits/second
required<number>: 4
name: "Hani Q"
Но все перепробовал и я не могу понять, как использовать async / await здесь, чтобы получить все DocumementReferecnce из массива и pu sh в массив Habit, а затем, после того, как все сделано, я отправляю обратно res.send ({status: "Success" });
Ответ
Ниже работал после реализации принятого ответа
const assignedHabits = salik.data()['assigned_habits'];
const habits_data = (await Promise.all(assignedHabits.map(element => element.habit.get())))
.map(snapshot => snapshot.data());
console.log(habits_data);
res.send({status: habits_data});