Я пытаюсь l oop через массив функции ParkingSpots и вернуть объект, который содержит объект ParkingSpot плюс еще 2 информации. Поскольку я внутри своего алгоритма, я использую обещание при просмотре заказов на парковку, я не могу использовать фильтр с await / asyn c (потому что он возвращает обещание), поэтому я использую функцию карты.
var results = await Promise.all(firstFilteredParkingSpots
.map((parkingSpot) => coveringPartially(reqStartDate, reqEndDate, parkingSpot.startOfAvailability, parkingSpot.endOfAvailability, parkingSpot)));
results.forEach((result, index) => {
if ( result !== null ) {
console.log(result)
alternativeRequests.push(firstFilteredParkingSpots[index]);
}
});
if (alternativeRequests.length > 0) {
return res.status(200).json({
alternativeRequests: alternativeRequests
});
}
return res.status(404).json({
message: "No available alternative requests for requested period"
});
Это моя функция прикрытия Частично:
module.exports = async function coveringPartially(reqStartDate, reqEndDate, startOfAvailOfParkingSpot, endOfAvailOfParkingSpot, parkingSpot) {
var parkingSpotBookings = await Booking.find({ parkingSpotId: parkingSpot._id})
if (parkingSpotBookings.length == 0) {
if (reqEndDate > startOfAvailOfParkingSpot && reqEndDate < endOfAvailOfParkingSpot) {
return {
parkingSpot: parkingSpot,
alternativeStartDate: startOfAvailOfParkingSpot,
alternativeEndDate: reqEndDate
}
}
else if (reqStartDate > startOfAvailOfParkingSpot && reqStartDate < endOfAvailOfParkingSpot) {
return {
parkingSpot: parkingSpot,
alternativeStartDate: reqStartDate,
alternativeEndDate: endOfAvailOfParkingSpot,
}
}
return null
}
let sortedBookings = parkingSpotBookings.sort( (currentBooking, nextBooking) => {
return nextBooking.startDate - currentBooking.startDate
})
sortedBookings.reverse()
console.log(sortedBookings)
sortedBookings.forEach((current, index, boookings) => {
if(index < boookings.length - 1) {
let next = boookings[index + 1]
if(reqStartDate < next.startDate && reqEndDate > next.startDate ) {
if( reqStartDate < current.endDate) {
return {
parkingSpot: parkingSpot,
alternativeStartDate: current.endDate,
alternativeEndDate: next.startDate
}
} else {
var result= {
parkingSpot: parkingSpot,
alternativeStartDate: reqStartDate,
alternativeEndDate: next.startDate
}
console.log(result)
return result
}
}
else if (reqStartDate < current.endDate && reqEndDate > current.endDate) {
if(reqEndDate < next.startDate) {
var result = {
parkingSpot: parkingSpot,
alternativeStartDate: current.endDate,
alternativeEndDate: reqEndDate
}
return result
} else {
return {
parkingSpot: parkingSpot,
alternativeStartDate: current.endDate,
alternativeEndDate: next.startDate
}
}
}
}
return null
})
}
Когда я вызываю API, алгоритм работает, и внутри покрытия Частично определяется результат нового объекта, но, к сожалению, при возврате в функцию карты он не определен. Вот что я получаю внутри функции:
parkingSpot:
{ isAvailable: true,
_id: 5ecaefee7ab072208be280dd,
number: 'SpitalColtea',
userId: 5ec93159116b25ae0106aeb9,
address: 'asdmasdsa',
latitude: 44.434334,
longitude: 26.103619,
notes: 'String',
endOfAvailability: 2020-07-11T08:00:00.410Z,
startOfAvailability: 2020-07-11T20:00:00.410Z },
alternativeStartDate: 2020-07-11T14:15:00.410Z,
alternativeEndDate: 2020-07-11T15:00:00.410Z }
Но после выполнения карты я не могу получить объект, и когда я пытаюсь напечатать на консоли, я получаю «undefined». Не могли бы вы мне помочь с этим вопросом?