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

    chokoroko
    @chokoroko Автор вопроса
    Вадим скажите вы имели ввиду таким образом реализовать ?
    function checkTicketsAvailable(data, time, numOfTicketBooked,number,food,format) {
        console.log('Выбираем билет...');
        return new  Promise((resolve, reject) => {
            setTimeout(() => {
                const setsAvailable = seats[data][time].freeSeats.length;
                if (setsAvailable >= numOfTicketBooked) {
                    resolve(setsAvailable);
                } else {
                    reject(`Мест на ${data} в ${time} нет`)
                }
            },2000);
        })
            .then(() => {
                console.log('Бронируем билеты...');
                return new Promise((resolve, reject) => {
                    setTimeout(() => {
                        const checkFreeSeats = number.every((el) => seats[data][time].freeSeats.includes(el))
                        if (checkFreeSeats === true) {
                            resolve(checkFreeSeats)
                        } else {
                            reject(`На ${data} в ${time} места ${number} занято`)
                        }
                    },1500)
                })
            })
            .then(() => {
                console.log('Проверяем можно ли в зал с едой...');
                return new Promise((resolve) => {
                    setTimeout(() => {
                        if (food === true) {
                            console.log(`Сеанс ${data} в ${time} с едой можно`);
                        } else {
                            console.log(`Сеанс ${data} в ${time} с едой к сожалению нельзя`);
                        }
                        resolve(food);
                    },3000)
                })
            })
            .then(() => {
                console.log('Выбираем формат фильма...');
                return new Promise((resolve) => {
                    setTimeout(() => {
                        if (format === true) {
                            console.log(`Сеанс ${data} в ${time} будет в формате 3D`);
                        } else {
                             console.log(`Сеанс ${data} в ${time} будет в формате 2D`);
                        }
                        resolve(format);
                    },4000)
                })
            })
    }
    
    async function bookTickets(data, time, numOfTicketBooked,number,food,format) {
        try {
            const availableSeats = await checkTicketsAvailable(data, time, numOfTicketBooked,number,food,format);
            console.log(`Вы забронировали на ${data}, ${numOfTicketBooked} билетов на ${time}, ваши места ${number}`)
        } catch (error) {
            console.log(error)
        } finally {
            console.log('Спасибо что выбрали наш кинотеатр !')
        }
    }
    
    
    bookTickets('2023-02-17','15:00',3,['11', '21','50'],false,false);
  • Как добавить функционал в код с помощью promise и async/await?

    chokoroko
    @chokoroko Автор вопроса
    Вадим
    1.Не могу понять как добавить функционал с помощью promise и async/await в данный код.
    2.Нет это я допустил ошибку. Я пытался проверить (seatsAvailable это количество свободных мест больше чем
    numTicket это количество билетов которые я забронировал)
  • Почему не отображается сообщение в чате?

    chokoroko
    @chokoroko Автор вопроса
    Владимир не помогает, блок зеленый появляется а сообщение нет.
    Я пробовал messageContainer.appendChild(textParagraph);
    textParagraph.appendChild(response.message);
    isMessageFromUser.appendChild(textParagraph);
  • Почему не отображается сообщение в чате?

    chokoroko
    @chokoroko Автор вопроса
    Владимир не очень вас понимаю. Куда именно нужно вставить данный элемент textParagraph
    Вы имеете ввиду таким образом message.appendChild(textParagraph)
  • Почему не отображается сообщение в чате?

    chokoroko
    @chokoroko Автор вопроса
    Владимир, Вы имеет ввиду backEnd часть ?
    import express from 'express';
    import { Server } from 'socket.io'
    
    const PORT = 3000;
    const app = express();
    const options = {
      cors: true,
      origin: ['http://localhost:3000'],
    }
    
    const server = app.listen(PORT, () => {
      console.log('Сервер запустился!');
    })
    
    const io = new Server(server, options);
    app.use(express.static('./dist'))
    
    app.get('/', (req, res) => {
      res.sendFile("index.html");
    })
    
    const messages = {}
    
    io.on('connection', socket => {
      socket.emit('добрый день', socket.id);
      socket.join('room1');
      socket.emit('messages', messages);
    
      socket.on('message', message => {
        io.to('room1').emit('receiveMessage', {
          userId: socket.id,
          message: message
        })
      })
    
      socket.on('editMessage', (data) => {
        if (messages[data.messageId]) {
          message[data.messageId].message = data.message;
        }
    
        io.to('room1').emit('updateMessage', {
          messageId: data.messageId,
          message: messages[data.messageId]
        });
      })
    
      socket.on('deleteMessage', messageId => {
        delete messages[messageId];
        io.to('room1').emit('removeMessage', messageId);
      })
    })
  • Почему модальное окно всплывает только при нажатие на первую кнопку?

    chokoroko
    @chokoroko Автор вопроса
    0xD34F у меня есть несколько кнопок product_button(Купить) при нажатие на которые появляются разные модальные окна product_congratulations. Я это реализовал таким образом
    if (event.target.tagName === 'BUTTON') {
            const currentParentDIV = document.querySelector('.wrapper_product').closest('.product');
            console.log(currentParentDIV);
            currentParentDIV.classList.toggle('active');
            setTimeout(() => {
                document.querySelectorAll('.active').forEach((activeEl) => {
                    activeEl.classList.remove('active')
                })
            },3000);
        }

    То есть при нажатию на одну из кнопок product_button(Купить) родителю кнопки product добавляется класс active, следовательно если у родителя product есть класс active то должно появляться модальное окно product_congratulations.
    Проблема заключается в том что модальное окно product_congratulations появляется только при нажатие на кнопку product_button(Купить) которая находиться в карточки iPhone, при нажатие на другие кнопки(Купить) в других карточках модальные окна не появляются.
    Ваш ответ не помог так как в данном случае класс active добавляется кнопки product_button(Купить) а должен добавляться родителю кнопки product
  • Почему модальное окно всплывает только при нажатие на первую кнопку?

    chokoroko
    @chokoroko Автор вопроса
    0xD34F скажите пожалуйста почему нужно навешивать active на button ?
    Почему нельзя навешивать на product или wrapper_product чтобы все работало.
  • Как скрывать текущий item(li) при открытие другого item(li)?

    chokoroko
    @chokoroko Автор вопроса
    0xD34F подскажите пожалуйста по поводу вашего кода:
    1. Почему вы использовали { target: t } а не event. Это одно и тоже ?
    2. Не очень понимаю данную строку n.classList.toggle('active', n.contains(parent)) а именно n.contains(parent). Обычно в метод toggle мы передаем только класс. Можно ли данное выражение n.classList.toggle('active', n.contains(parent)) записать более проще и понятнее ?
  • Как избавиться от дубликата?

    chokoroko
    @chokoroko Автор вопроса
    Сергей Соколов вот так вот ? Я не очень понимаю как передать аргументы в текст элементов.
    if (counter === 0) {
            function moreHTML(title, number1, number2, number3) {
                li.innerHTML = '<span class="title">Третий список</span>' +
                    '<ul class="extra-list">' +
                    '<li class="extra-item">9 элемент списка</li>'  +
                    '<li class="extra-item">10 элемент списка</li>' +
                    '<li class="extra-item">11 элемент списка</li>' +
                    '</ul>'
            }
        }
  • Как избавиться от дубликата?

    chokoroko
    @chokoroko Автор вопроса
    Сергей Соколов, да элементы и заголовок списка отличаются только порядковыми номерами. Я думал реализовать как-то с помощью функции но ничего не получилось
    function func(title,firstEl,secondEl,thirdEl) {
            return li.innerHTML = '<span class="title">Третий список</span>' +
                '<ul class="extra-list">' +
                '<li class="extra-item">9 элемент списка</li>'  +
                '<li class="extra-item">10 элемент списка</li>' +
                '<li class="extra-item">11 элемент списка</li>' +
                '</ul>'
        }
  • Почему тест Jest выдает ошибку(Uncaught ReferenceError: module is not defined)?

    chokoroko
    @chokoroko Автор вопроса
    Александр обновил вопрос (добавил код и фото ошибки)
  • Почему тест Jest выдает ошибку(Uncaught ReferenceError: module is not defined)?

    chokoroko
    @chokoroko Автор вопроса
    Василий Банников обновил вопрос (добавил код и фото ошибки)
  • Как передать свойство в наследуемый класс?

    chokoroko
    @chokoroko Автор вопроса
    Rise По заданию мне нужно сделать
  • Почему код выдает ошибку Uncaught TypeError?

    chokoroko
    @chokoroko Автор вопроса
    Сергей Соколов Здравствуйте у меня проблема заключается в том что не хочет применяться свойство length к массиву.

    Я уже провел несколько проверок действительно ли он является массивом.

    63d6566c8b55a388534199.png

    Все равно не могу применить выдает ошибку.

    Вот мой код на данный момент :

    class Student {
        constructor(firstName,lastName,yearOfBirth,arrayOfGrades) {
            this.firstName = firstName;
            this.lastName = lastName;
            this.yearOfBirth = yearOfBirth;
            this.arrayOfGrades = arrayOfGrades;
        }
        //______Возраст студента______//
        getAge () {
            return console.log(`${this.firstName}'s old is ${2023 - this.yearOfBirth} years`);
        }
        //______Средний бал______//
        averageMark () {
            let sum = 0;
            for (let i = 0; i < this.arrayOfGrades.length; i++) {
                sum = sum + this.arrayOfGrades[i];
            }
            return console.log(`${this.firstName}'s average mark is ${sum / this.arrayOfGrades.length}`);
        }
    
    }
    //______Экземпляры студентов______//
    const student = new Student('Dmitriy','Yaroshchuk',2001,[70,80,90,100,90,90,99,100,95,100]);
    const student1 = new Student('Andrew','Kavetsky',2000,[90,90,90,90,90,90,100,100,95,93]);
    const student2 = new Student('Diana','Koko',1999,[70,70,70,70,70,70,75,75,75,93]);
    
    //______Проверка что arrayOfGrades является массивом_____//
    // console.log(student.arrayOfGrades);
    // console.log(typeof student.arrayOfGrades);
    // console.log(Array.isArray(student.arrayOfGrades));
    // const spreadArrayOfGrades = [...(student.arrayOfGrades)];
    // const spreadArrayOfGrades1 = [...(student1.arrayOfGrades)];
    // const spreadArrayOfGrades2 = [...(student2.arrayOfGrades)];
    // console.log(spreadArrayOfGrades);
    // console.log(spreadArrayOfGrades1);
    // console.log(spreadArrayOfGrades2);
    
    //______Вызываю методы______//
    student.getAge();
    student1.getAge();
    student2.getAge();
    student.averageMark();
    student1.averageMark();
    student2.averageMark();
    
    class Visit extends Student {
        constructor() {
            super();
            this.visitinMagazine = [];
        }
        //______Используется когда студент был на занятие______//
        present () {
            if (this.visitinMagazine.length < 26) {
                this.visitinMagazine.push(true);
                return this;
            } else {
                return this.visitinMagazine.pop();
            }
        }
        //______Используется когда студент НЕ был на занятие______//
        absent () {
            if (this.visitinMagazine.length < 26) {
                this.visitinMagazine.push(false);
                return this;
            } else {
                return this.visitinMagazine.pop();
            }
        }
    }
    //______Экземпляры посейщения______//
    const visit = new Visit();
    const visit1 = new Visit();
    const visit2 = new Visit();
    
    //______Посейщение уроков______//
    visit.present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().absent().absent();
    const callOfVisitnMagazine = [...(visit.visitinMagazine)];
    // console.log(callOfVisitnMagazine);
    
    //______Посейщение уроков______//
    visit1.absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().present().present();
    const callOfVisitnMagazine1 = [...(visit1.visitinMagazine)];
    // console.log(callOfVisitnMagazine1);
    
    //______Посейщение уроков______//
    visit2.present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().absent().absent().absent();
    const callOfVisitnMagazine2 = [...(visit2.visitinMagazine)];
    // console.log(callOfVisitnMagazine2);
    
    
     class Calculation extends Visit {
        constructor(arrayOfGrades,visitinMagazine) {
            super(arrayOfGrades,visitinMagazine);
        }
         //______Колличество занятий______//
         amountOfClasses () {
             return console.log(this.arrayOfGrades);
         }
         //______Колличество посищений______//
         amountOfVisits () {
             return console.log(this.visitinMagazine.filter((element) => element === true).length);
         }
         //______Проверяем среднюю оценку и посейщение______//
         summary () {
             const averageVisit = this.amountOfVisits / this.amountOfClasses;
             if (this.averageMark > 90 && averageVisit > 0.9) {
                 return console.log('Cool!');
             } else if (this.averageMark > 90 || averageVisit > 0.9) {
                 return console.log('Good, but it can be better!');
             } else {
                 return console.log('Radish');
             }
         }
     }
    //______Экземпляры расчетов______//
    const calculate = new Calculation([70,80,90,100,90,90,99,100,95,100],callOfVisitnMagazine);
    const calculate1 = new Calculation([90,90,90,90,90,90,100,100,95,93],callOfVisitnMagazine1);
    const calculate2 = new Calculation([70,70,70,70,70,70,75,75,75,93],callOfVisitnMagazine2);
    
    calculate.amountOfClasses();
    calculate1.amountOfClasses();
    calculate2.amountOfClasses();
    
    calculate.amountOfVisits();
    calculate1.amountOfVisits();
    calculate2.amountOfVisits();
    
    calculate.summary();
    calculate1.summary();
    calculate2.summary();
  • Почему код выдает ошибку Uncaught TypeError?

    chokoroko
    @chokoroko Автор вопроса
    VoidVolker я провел проверку массива arrayOfGrades
    63d6543d32c3f564499646.png

    Но я не могу понять почему я не могу применить length к массиву
    63d65475bfdb6398421757.png
  • Почему код выдает ошибку Uncaught TypeError?

    chokoroko
    @chokoroko Автор вопроса
    @VoidVolkerДелал проверку:
    console.log(student.arrayOfGrades) выводит массив (10) [70, 80, 90, 100, 90, 90, 99, 100, 95, 100]
    Делал проверку на тип:
    console.log(typeof student.arrayOfGrades) выводит object
    Не понимаю как такое может быть.
  • Как перебрать методы объектов в массиве?

    chokoroko
    @chokoroko Автор вопроса
    Сергей Соколов подскажите пожалуйста а что это обозначает %s %o.
  • Как перебрать методы объектов в массиве?

    chokoroko
    @chokoroko Автор вопроса
    Сергей Соколов Задание: Преподаватель создал gradeLabsфункцию, которая проверяет, работают ли студенческие лаборатории по программированию. Эта функция выполняет цикл над массивом объектов JavaScript, которые должны содержать student свойство и runLab свойство.
    Ожидается runLab, что свойство будет функцией, содержащей код студента. Вызывается runLabфункция и результат сравнивается с ожидаемым. Если результат и ожидаемый результат не совпадают, лаборатория считается неудачной.
    Функция gradeLabs работает в большинстве случаев. Но что произойдет, если учащийся неправильно назвал свою функцию? Запустите gradeLabsи передайте его studentLabs2, как описано ниже.
    После выполнения второго примера учитель получает .TypeError: lab.runLab is not a function
    Добавьте try/catchблок внутри, gradeLabsчтобы перехватить исключение, если runLab свойство не определено. Если генерируется исключение, result должно быть установлено text ."Error thrown"