Я пытаюсь подтвердить бронирование, сравнивая столкновения с другими бронированиями (вызываемыми индивидуально из БД) в расписании тренера на сайте бронирования.
Я знаю, что вызовы Firebase являются асинхронными, поэтому мне нужно найти способ ожидания получения и проверки всех заказов внутри функции forEach.
Я попытался поместить переменную-флаг перед forEach и console.logged в конце, но, очевидно, он не работает, так как console.log не будет ждать завершения forEach перед запуском.
Я читал об 'asyn c await', но похоже, что для этого сценария будет слишком много (?). Может ли быть более простой способ сделать это?
Любая помощь приветствуется.
const bookingData = {
coursename:this.state.coursename,
location:this.state.location,
trainerid:this.state.trainerid,
startDatetime: this.state.startDatetime,
endDatetime: this.state.endDatetime,
} //FORM DATA I WANT TO VALIDATE
db.collection('timetables').doc(timetableid).get().then(timetable=>{
const data = timetable.data(); //ARRAY OF BOOKING ID'S
data.bookings.forEach(bookingid=>{
db.collection('bookings').doc(bookingid).get().then(bookingref=>{
//FOR EACH 'BOOKING' DOCUMENT IN MY DB, I WANT TO PERFORM THE FOLLOWING OPERATION
const booking = bookingref.data().bookingInfo;
if( booking.startDatetime.toDate() <= bookingData.startDatetime &&
booking.endDatetime.toDate() >= bookingData.startDatetime &&
booking.startDatetime.toDate() <= bookingData.endDatetime &&
booking.endDatetime.toDate() >= bookingData.endDatetime) {
console.log('TIME SLOT UNAVAILABLE')
}
else {
console.log('TIME SLOT AVAILABLE')
}
}).catch(err=>console.log(err));
});
})
// FIND A WAY TO SEE IF THE BOOKING WAS VALID AFTER BEING COMPARED WITH ALL OF THE BOOKINGS IN THE DB