Как добавить функционал в код с помощью promise и async/await?

Проблема заключается в том что в данный код никак не получается реализовать функционал выбор конкретного места 'freeSeats', выбор формата фильмы (если true то 3D, если false то 2D), можно ли в зал с едой (если true то можно , если false то нельзя)
Исходный код:
const seats = {

    '2023-02-17': {

        '09:00': {
            'freeSeats': [
                '1','4','8','9','10',
                '12','13','18','19','21',
                '24','25','33','48','50',
            ],
            'format': false,
            'food': true
        },
        '12:00': {
            'freeSeats': [
                '7','8','13','14','25',
                '26','37','48','49','51',
                '52','58','61','64','75',
            ],
            'format': true,
            'food': false
        },
        '15:00': {
            'freeSeats': [
                '11','21','31','41','50'
            ],
            'format': false,
            'food': true
        },
    },

    '2023-02-18': {

        '09:00': {
            'freeSeats': [
                '11','14','17','19','25',
                '26','27','28','39','40',
                '41','52','53','74','75',
            ],
            'format': true,
            'food': false
        },
        '12:00': {
            'freeSeats': [
                '41','43','48','49','50',
                '56','57','58','59','60'
            ],
            'format': false,
            'food': true
        },
        '15:00': {
            'freeSeats': [
                '1','2','3','4','5',
            ],
            'format': true,
            'food': false
        },
    },

    '2023-02-19': {

        '09:00': {
            'freeSeats': [
                '1','2','3','4','5',
                '6','7','8','9','10',
                '11','12','13','14','15',
            ],
            'format': false,
            'food': true
        },
        '12:00': {
            'freeSeats': [
                '21','22','23','24','55',
                '66','77','78','79','80',
                '81','82','83','84','85',
            ],
            'format': true,
            'food': false
        },
        '15:00': {
            'freeSeats': [
                '11','23'
            ],
            'format': false,
            'food': true
        },
    },
}
function checkTicketsAvailable(date, time, numTicket) {
  return new Promise((resolve, reject)=> {
    setTimeout(() => {
     const setsAvailable = seats[date][time].freeSeats.length;
      if(seatsAvailable >= numTicket){
        resolve(seatsAvailable);
      } else {
        reject(`Свободных мест на ${date} в ${time} нет`);
      }
    }, 1000);
  })
}


async function bookTickets(date, time, numTickets){
  try{
    const availableSeats = await checkTicketsAvailable(date, time, numTickets);
    console.log(`${date} вы забронировали ${numTickets} билетов на время: ${time}`);
  } catch (error) {
    console.error(error);
  }
}

bookTickets('2023-02-17', '15:00', 2);
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
TemaSM
@TemaSM
Fullstack, DevOps, InfSec
Чтобы реализовать функционал выбора конкретного места из списка freeSeats, можно добавить аргумент функции bookTickets, который будет принимать массив выбранных мест. Затем нужно проверить, что все места из выбранного массива находятся в списке свободных мест freeSeats. Если все места доступны, то их можно забронировать.

Чтобы реализовать выбор формата фильма и наличия еды, можно добавить соответствующие параметры в вызов функции bookTickets. Затем можно добавить проверки на соответствие параметров формата и наличия еды заданным значениям в объекте seats. Если формат фильма или наличие еды не соответствуют требованиям, можно выкинуть ошибку.

Вот пример, как можно изменить код с учетом этих требований:
Раскрыть код

async function bookTickets(date, time, numTickets, selectedSeats = [], is3D = false, hasFood = false){
  try{
    const availableSeats = await checkTicketsAvailable(date, time, numTickets);
    
    // проверка наличия выбранных мест
    const unavailableSeats = selectedSeats.filter(seat => !seats[date][time].freeSeats.includes(seat));
    if (unavailableSeats.length > 0) {
      throw new Error(`Места ${unavailableSeats.join(', ')} недоступны`);
    }

    // проверка формата и наличия продуктов питания
    if ((is3D && !seats[date][time].format) || (hasFood && !seats[date][time].food)) {
      throw new Error(`Невозможно забронировать билеты с выбранными параметрами`);
    }

    console.log(`${date} вы забронировали ${numTickets} билетов на время: ${time}`);
    if (selectedSeats.length > 0) {
      console.log(`Выбранные места: ${selectedSeats.join(', ')}`);
    }
    if (is3D) {
      console.log(`Формат фильма: 3D`);
    } else {
      console.log(`Формат фильма: 2D`);
    }
    if (hasFood) {
      console.log(`С едой`);
    } else {
      console.log(`Без еды`);
    }
  } catch (error) {
    console.error(error);
  }
}

bookTickets('2023-02-17', '15:00', 2, ['11', '21'], false, true);


В данном примере добавлены аргументы selectedSeats, is3D и hasFood для выбора мест, формата фильма и наличия еды соответственно. Затем в функции bookTickets проверяется доступность выбранных мест и соответствие параметров формата и наличия еды требованиям. Выводится сообщение о бронировании билетов и выбранных параметрах.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы